IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

PHP Curl : perte des données POST si Authorization Bearer présent


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut PHP Curl : perte des données POST si Authorization Bearer présent
    Bonjour à tous,

    J'ai un problème qui me fait tourner en rond : je voudrais faire un simple POST sur une API qui attend un token, donc en Authorization Bearer.

    Si je fais cet appel depuis Jquery, tout marche très bien (ça écarte un souçi d'auth ou de traitement data coté API).

    En Curl ça se complique : si je fais l'appel ci-dessous, ma requête est acceptée par l'API (donc Authorization OK) mais je n'ai aucune donnée POST qui passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $params  = array();		
    				$params['titre'] = "Bonjour";
    				$params['objet'] = "On teste";										
     
    				$headers = array(
    				    'Content-Type: application/json',
    				    sprintf('Authorization: Bearer %s', $access_token)
    				  );
     
    				$params_string = http_build_query($params);
     
    				$ch = curl_init();
    				curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    				curl_setopt($ch, CURLOPT_URL, $url_endpoint);
    				curl_setopt($ch, CURLOPT_POST, 1);
    				curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
    				curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     
    				print_r( curl_exec($ch));
    Et pour avoir testé ce code sur un endpoint que je maitrise totalement, je m'aperçois effectivement que dès que je commente le header, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    Et bien mes données POST passent.

    Merci d'avance pour votre aide !

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    d'après le code vous envoyer les données dans le format "multipart/form-data" donc essayez en enlevant la ligne "content-type" des entêtes.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    1- Pourquoi utiliser curl plutôt que les stream présent par défaut ?

    2- C'est très certainement un problème de contentype , rien à voir avec le jwt.
    De mémoire quand tu utilises CURLOPT_POSTFIELDS avec CURL il défini automatiquement le Content-Type à multipart/form-data. Ce n'est peut être pas ce qu'attends l'API.

    Il faut vérifier la requête http qui part (via wireshark par exemple).
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    Citation Envoyé par mathieu Voir le message
    d'après le code vous envoyer les données dans le format "multipart/form-data" donc essayez en enlevant la ligne "content-type" des entêtes.
    Un grand MERCI !

    J'ai effectivement défini le header ainsi et ça passe impec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $headers = array(     sprintf('Authorization: Bearer %s', $access_token)  );

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    Citation Envoyé par grunk Voir le message
    1- Pourquoi utiliser curl plutôt que les stream présent par défaut ?

    2- C'est très certainement un problème de contentype , rien à voir avec le jwt.
    De mémoire quand tu utilises CURLOPT_POSTFIELDS avec CURL il défini automatiquement le Content-Type à multipart/form-data. Ce n'est peut être pas ce qu'attends l'API.

    Il faut vérifier la requête http qui part (via wireshark par exemple).
    Salut, je ne connaissais pas les "stream", je vais chercher pour m'informer.

    Pour le reste c'est résolu, c'était bien le content-type qui me "neutralisait" le tableau $_POST quand j'utilisais mon header.

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par vallica Voir le message
    Salut, je ne connaissais pas les "stream", je vais chercher pour m'informer.
    un exemple simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $postdata = http_build_query(
        array(
            'var1' => 'some content',
            'var2' => 'doh'
        )
    );
     
    $opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postdata
        )
    );
     
    $context  = stream_context_create($opts);
     
    $result = file_get_contents('http://example.com/submit.php', false, $context);
    source

    Ça à l'avantage de n'utiliser que des fonctions native du langage et pas une lib tierce qui n'est pas forcément disponible partout.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/11/2016, 17h19
  2. Réponses: 3
    Dernier message: 29/05/2016, 10h25
  3. comment utiliser cURL dans php pour envoyer des données de php vers application android
    Par myaset dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 15/04/2013, 13h44
  4. Réponses: 0
    Dernier message: 08/05/2012, 11h11
  5. [JTable] Perte des données
    Par david71 dans le forum Composants
    Réponses: 8
    Dernier message: 09/01/2005, 00h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo