Page 1 sur 1

ajouter photo à API, erreur 406

Posté : 31 janv. 2020, 20:05
par romane_pm
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 !

Re: ajouter photo à API, erreur 406

Posté : 31 janv. 2020, 20:53
par @rthur
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.

Re: ajouter photo à API, erreur 406

Posté : 02 févr. 2020, 12:54
par romane_pm
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

Posté : 02 févr. 2020, 18:13
par tesmet
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.