ajouter photo à API, erreur 406

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : ajouter photo à API, erreur 406

Re: ajouter photo à API, erreur 406

par tesmet » 02 févr. 2020, 18:13

Bonjour. Je connais mal cURL, par contre
 
                                       // Une image est toujours en base64.
CURLOPT_POSTFIELDS => array( 'file' => base64_encode($photo) ), // file est bien le nom du champs du formulaire?
                               // au vu de HTTP 406 Accept incorrect et HTTP 400 entête incorrecte
CURLOPT_HTTPHEADER => array(), // autant essayer d'abord avec aucune entête supplémentaire.

Re: ajouter photo à API, erreur 406

par romane_pm » 02 févr. 2020, 12:54

finalement j'ai fais ça
   $token_file=fopen("headers.txt","r");
        $i=0;
        while($i<2)
        {
            $token=fgets($token_file);
            $i++;
        }
        fclose($token_file);


        $pathCurrrent=getcwd ();
        $path= str_replace("public", "src/Controller", $pathCurrrent);
      //  echo $path;
        $dir    = "$path/uploads";
        $allFiles = scandir($dir);
        $files=array_diff($allFiles, array('.','..'));
        print_r($files);
        $photo=$dir.'/'.$files[2];
      //  print_r($files[2]);
        echo $photo;

        $boundary = uniqid();
        echo $boundary;
        $delimiter = '-------------' . $boundary;

     /*   if (function_exists('curl_file_create')) { // php 5.5+
            $cFile = curl_file_create($photo);
        } else { //
            $cFile = '@' . realpath($photo);
        }
        $post = array('extra_info' => '123456','file'=> $cFile);*/


        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => "http://varlot.epfprojets-sceaux.com:8080/uploadFile?flashAttributes=%7B%7D&fnc_id=7&type=true",
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => array('file'=> @$photo),
            CURLOPT_HTTPHEADER => array(
                rtrim($token, "\r\n"),
               // 'Accept: /',
                "Content-Type: multipart/form-data; boundary=" . $delimiter,

            ),
        ));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_POST, 1);

      //  curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
        //$postfiles=array('file'=> new CURLFILE($photo));
       // print_r($postfiles);

        $result = curl_exec($curl);
        var_dump($result);
        $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        var_dump($http_code);
        curl_close($curl);
Et j'ai l'erreur 400 Required request part 'file' is not present. Mais je ne comprends pas car il y le champs 'file'. j'ai essayé de la faire en mettant new CURLFILE aussi mais j'ai eu la même erreur...

Re: ajouter photo à API, erreur 406

par @rthur » 31 janv. 2020, 20:53

Qu'est-ce qui renvoie une erreur 406 ?
Le résultat de ton appel Curl ? Si c'est le cas il faut que tu voies avec le serveur vers lequel tu fais cet appel car impossible pour nous sans le connaitre de savoir pourquoi il te répond cela.

ajouter photo à API, erreur 406

par romane_pm » 31 janv. 2020, 20:05

Bonjour à tous,

Je suis sur une projet où je dois coder une site internet en php. Ce site est "lié" à une API.

Le but du site est de créer des fiches de non conformité pour ensuite y avoir accès. Mon problème est lors de l'ajout de photos à une fiche.

Voici mon code:
//récupération du token pour avoir accès à la fonction de l'API
$token_file=fopen("headers.txt","r");
        $i=0;
        while($i<2)
        {
            $token=fgets($token_file);
            $i++;
        }
        fclose($token_file);
 
//récupération du chemin de la photo (c'est le bon chemin qui récupère la photo j'ai testé
        $pathCurrrent=getcwd ();
        $path= str_replace("public", "src/Controller", $pathCurrrent);
        $dir    = "$path/uploads";
        $allFiles = scandir($dir);
        $files=array_diff($allFiles, array('.','..'));
        print_r($files);
        $photo=$dir.'/'.$files[2];
        echo $photo;
 
        $curl = curl_init();
 
        curl_setopt_array($curl, array(
            CURLOPT_URL => "http://monURl/uploadFile?flashAttributes=%7B%7D&fnc_id=7&type=true",
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => array('file'=> new CURLFILE($photo)),
            CURLOPT_HTTPHEADER => array(
                rtrim($token, "\r\n"),
                'Accept: /',
                "Content-Type: multipart/form-data"
 
            ),
        ));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_POST, 1);
 
        $result = curl_exec($curl);
        var_dump($result);
        $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        var_dump($http_code);
        curl_close($curl);
Cependant cela me renvoie une erreur 406 je ne comprends pas pourquoi. Pourriez-vous m'aider ? Un grand merci !