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

Langage PHP Discussion :

Post de Form avec Curl [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 141
    Points : 79
    Points
    79
    Par défaut Post de Form avec Curl
    Bonjour,

    Sur mon project en cours, j'utilise curl pour utiliser des web services. Les requetes de recherche passent mais là ou j'ai un soucis, c'est pour inscrire un nouvel utilisateur.
    Pour ce webservice, j'ai besoin de renseigner dans mon header "user : keyuser".

    Voici le code
    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
    20
    21
    22
    23
     
    $url = 'http://dev.monurl.com/users/create?test=1&';
    $str_params = 'email=raldo.chea@gmail.com&passwd=monmdp&group_id=1&pseudo=serafin';
     
    $strlen_url = strlen($url);
    $strlen_params = strlen($str_params);
    // je réutilise le header actuel et j'ajoute d'autres éléments si besoin
    $header = header_list();
    $header[] = "Content-length: ". ($strlen_url + $strlen_params);
    $header[] = "user : keyuser";
     
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $str_params);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     
    $data = curl_exec($ch);
     
    curl_close($ch);
    echo $data;
    Résultat de cette page, c'est page blanche après quelques seconde d'attente ..
    Si je commente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    j'obtien :
    {"status": "nok", "results": {"message": "Unauthorized request or unauthorized HTTP method or missing headers."}}
    Pour l'instant, sur tout les web services utilisés sur le projet, ce web service est le seul ou je dois utiliser CURLOPT_HTTPHEADER et c'est le seul que je n'arrive pas à utiliser.

    Est ce que ce web service fonctionne ? Une application mobile pour Iphone l'utiliserait sans problème ....

    Merci d'avance pour votre aide

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 141
    Points : 79
    Points
    79
    Par défaut
    Ok, alors j'ai une nouvelle piste.
    je laisse le CURLOPT_HTTPHEADER mais je modifie ma variable $header.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $header = headers_list();
    $header[] = "user : mykey";
    //$header[] = "Content-length: 83226" ;
    ....
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    la, j'ai pas de page blanche mais j'ai le message suivant :
    {"status": "nok", "results": {"message": "Unauthorized request or unauthorized HTTP method or missing headers."}}
    .... qu'est ce que je dois mettre dans le content-lenght ? ou est ce que je dois mettre autre chose ?

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    enelve le $header = headers_list(); pour voir

  4. #4
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 141
    Points : 79
    Points
    79
    Par défaut
    Toujours le meme message d'erreur en enlevant le header_list() mais en regardant de plus près, j'ai une erreur 403.

    Se pourrait il qu'un web service puisse donné sur le résultat attendu sur une plateforme (sur Iphone par exemple) et générer une erreur pour une application web ?

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Zen_Fou Voir le message
    Toujours le meme message d'erreur en enlevant le header_list() mais en regardant de plus près, j'ai une erreur 403.

    Se pourrait il qu'un web service puisse donné sur le résultat attendu sur une plateforme (sur Iphone par exemple) et générer une erreur pour une application web ?
    oui, mais ca se peux se gérer avec le user-agent, sinon ta pas besion de curl pour faire se genre de requête php gère très bien ca en natif

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 141
    Points : 79
    Points
    79
    Par défaut
    je suis preneur d'une autre solution si ca peut m'aider. Je veux que mon code soit propre et que ca fonctionne. Si une solution native à PHP existe, je prend

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Zen_Fou Voir le message
    je suis preneur d'une autre solution si ca peut m'aider. Je veux que mon code soit propre et que ca fonctionne. Si une solution native à PHP existe, je prend
    essaye d'hab en mettant le user-agent de l'iphone

  8. #8
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 141
    Points : 79
    Points
    79
    Par défaut
    Ca ne passe pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    curl_setopt($ch, CURLOPT_USERAGENT, 'iphone');
    J'ai passé trop de temps dessus. Je ferai un point avec mon boss.

    Merci pour ton aide stealth35

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Zen_Fou Voir le message
    Ca ne passe pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    curl_setopt($ch, CURLOPT_USERAGENT, 'iphone');
    J'ai passé trop de temps dessus. Je ferai un point avec mon boss.

    Merci pour ton aide stealth35
    c'est pas ca le user-agent c'est :
    Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3

    (peu etre pa le dernier en cours mais c'est pas grave)

  10. #10
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 141
    Points : 79
    Points
    79
    Par défaut
    Pareil ....

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    c'est a toi de bien respecter l'API proposer, y'a une doc quelque part ?

  12. #12
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 141
    Points : 79
    Points
    79
    Par défaut
    Voila ce que dit l'API
    In addition to the Z-PROJECTAPI-CONSUMER key, a header named Z-PROJECTAPI-KEY should be specified in all requests requiring authorization. The header value will be communicated privately.
    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
    20
    21
    22
    23
     
    $url = 'http://dev.project.com/api/iphone/users/create?test=1&';
     
    $str_params = 'username=raldo.chea@gmail.com&passwd=ffffff&group_id=1&pseudo=tructruc';
     
    $header = array();
    $header[] = "Z-PROJECTAPI-CONSUMER : iphone\r\n";
    $header[] = "X-PROJECTAPI-KEY : projectctest\r\n";
     
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_POST, 1);
     
    curl_setopt($ch, CURLOPT_POSTFIELDS, $str_params);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     
    $data = curl_exec($ch);
     
    curl_close($ch);
    echo $data;
    Réponse du serveur
    HTTP/1.1 403 Forbidden Content-Type: application/json Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Content-Length: 113 {"status": "nok", "results": {"message": "Unauthorized request or unauthorized HTTP method or missing headers."}}

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    même en mettant le urser-agent ? et t'as pu la user : key ?

  14. #14
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 141
    Points : 79
    Points
    79
    Par défaut soluce
    Le problème était vraiment dans la forme du header ...
    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
     
    $url = 'http://dev.project.com/api/iphone/users/create?test=1&';
    $str_params = 'username=raldo5.chea@gmail.com&passwd=ffffff&group_id=1&pseudo=tructruc';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Z-PROJET-CONSUMER: iphone',
      'Z-PROJET-KEY: projettest'
    ));
     
    curl_setopt($ch, CURLOPT_POSTFIELDS, $str_params);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     
    $data = curl_exec($ch);
     
    curl_close($ch);

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    nickel, par contre je sais pas comment tu récupères tes donnée (XML ?) après, mais ta pas besoin de curl pour faire ca

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. POST avec redirection avec CURL
    Par reventlov dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 21/09/2012, 15h29
  2. Réponses: 2
    Dernier message: 04/11/2008, 15h04
  3. metre en relation une form avec le poste de travail.
    Par nicolas1995 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/10/2007, 16h49
  4. Répondre à une forme avec POST
    Par Phoxtrot dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 11/10/2007, 00h48
  5. Passer une URL dans un form avec POST
    Par dldstyle dans le forum Langage
    Réponses: 5
    Dernier message: 30/04/2006, 20h09

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