Partage
  • Partager sur Facebook
  • Partager sur Twitter

file_get_contents méthode POST : erreur 400

Sujet résolu
    19 octobre 2018 à 11:55:42

    Hello,

    J'ai une api qui permet de mettre une photo à un membre (pour expliquer rapidement ^^).

    En utilisant cette requête cURL, lorsque je l’exécute  tout fonctionne à merveille :

    curl -X POST "https://URL" -H 'accept: */*' -H 'Content-Type: multipart/form-data' -F "photo=@toto.jpg;type=image/jpeg" -u "login:password"

    J'essaie de faire le même processus en PHP. Avec le code suivant :

    $context = ["http" => [
                        "method" => "POST",
                        "header" =>
                        "accept: */*" . "\r\n" .
                        "Content-Type: multipart/form-data" . "\r\n" .
                        "Content-Disposition: form-data; name='photo'; filename='toto.jpg'; type='image/jpeg'" . "\r\n" .
                        "Authorization: Basic " . base64_encode("login:password") . "\r\n"
                    ]];
    
    file_get_contents("https://URL", FALSE, stream_context_create($context));


    Et là ça me pète une erreur 400 Bad Request.

    Avez-vous une idée svp ? :)

    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2018 à 12:21:56

      Salut,

      Il y a 2 choses à vérifier dans ton cas. file_get_contents nécessite que la configuration allow_url_fopen soit activé pour pouvoir accéder à un fichier distant. Vérifie également qu'il n'y a pas de caractères spéciaux dans ton url. par sécurité il vaut mieux appliquer la fonction urlencode sur ton url avant l'appel.

      Sinon je ne comprends pas pourquoi tu n'utilise pas pourquoi tu n'utilise pas directement l'api CURL en php pour accéder à une url distante, c'est le plus simple.

      Exemple simple : 

      $ch = curl_init();
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($ch, CURLOPT_VERBOSE, true);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_USERAGENT, self::USER_AGENT);
      curl_setopt($ch, CURLOPT_URL,$url);
      curl_exec($ch)



      • Partager sur Facebook
      • Partager sur Twitter
        19 octobre 2018 à 13:24:31

        Merci Vince pour ta réponse.

        Par contre, mon fichier est local pas distant. Je veux justement l'envoyer via le formulaire de l'api.

        L'api est du style "https://url:1234/api/membres/IDmembre/photo"

        Et oui je pourrais le faire en cURL ou même en shell comme je l'ai déjà fait, ça fonctionne. Mais j'ai jamais eu de problème à faire ce genre de chose en PHP avec un file_get_contents comme ça du coup ça me perturbe et j'essaie de comprendre où est l'erreur. C'est plus un défi personnel ^^

        EDIT : Et allow_url_fopen est bien "On"

        -
        Edité par AdrienAlmr 19 octobre 2018 à 13:26:12

        • Partager sur Facebook
        • Partager sur Twitter
          3 mars 2019 à 17:56:21

          Pour information, le problème venait de l'api. Sujet résolu
          • Partager sur Facebook
          • Partager sur Twitter

          file_get_contents méthode POST : erreur 400

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown