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 :

[cURL] requête POST


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Par défaut [cURL] requête POST
    Bonjour,

    Je suis entrain d'effectuer une requête post avec curl. Toutes les données de mon formulaire sont correct et lorsque je valide l'envoie de ma requête je récupère ce message erreur :

    Length Required

    du coup j'ai rajouté pour ma requête curl la fonction CURLOPT_HTTPHEADER pour définir dans une entête le content-lenght mais ça ne fonctionne toujours pas
    est-ce que quelqu'un aurait une idée à me soumettre pour régler ce problème ????

    voici mon 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    $header = array();
    $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,**/*;q=0.5";
    $header[] = "Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3";
    $header[] = "Accept-Encoding: gzip,deflate";
    $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
    $header[] = "Keep-Alive: 300";
    $header[] = "Connection: keep-alive";
    $header[] = "Content-Length: 400";
     
    //url de la page de soumission
    $url = "http://www....";
    $useragent = "Mozilla/5.0";
    $referer = "http://www....\r\n";
     
    //Initialise une session CURL
    $ch = curl_init($url);
    //CURL options
    //on défini les entetes de la requete http
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    //On poste les données du tableau $postfields
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
    //On définit un useragent ici Mozilla/5.0
    //souvent les bots se font passés pour googlebot ce qui finalement est stupide
    //On passe donc un useragent banal
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    //On passe un referrer ici on passe la même page $url
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    //on récupère le contenu de la page de résultat de la soumission dans une chaine
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     
    //Page de résultats et fermeture de session
    $result = curl_exec($ch);
    curl_close($ch);
     
    //on peut faire un echo du résultat obtenu
    echo $result;
    En faite que je mette ou pas mon header cela revient au même, j'ai toujours la même erreur donc soit je me suis trompé dans mes appellations soit ben je n'en sait rien

    Merci d'avance pour votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Par défaut Requete http
    Alors personne ne peut m'aider je dois juste valider le formulaire d'un site a distance et pour sa je fais une requete http avec curl mais jai d'abord comme probleme mon referer qui n'etait pas bon est-ce que sa change beaucoup de chose que je ne mette pas \r\n a la fin de mon referer ???

    Merci pour votre aide

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Pas besoin de mettre normalement les \r\n au niveau du referer.

    Et votre code est incomplet (il manque toute la partie données POST, qu'il serait vraiment intéressante d'avoir). Il me semble aussi que l'entête Content-Length est gérée par cURL donc vous pouvez lui laisser le soin de s'en occuper pour vous.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Par défaut
    voici mon code entier :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <?php
    	$postfields = array();
    	$postfields["action"] = "...";
    	$postfields["RoutePost"] =  "...";
    	$postfields["hidRoute1"] =  "...";
    	$postfields["hidRoute2"] =  "...";
    	$postfields["hidRoute3"] =  "...";
    	$postfields["hidRoute4"] =  "...";
    	$postfields["hidNoPax"] =  "...";
    	$postfields["hidCurrency"] =  "...";
    	$postfields["hidHomeURL"] =  "...";
    	$postfields["TripType"] =  "...";
    	$postfields["hidReferComp"] =  "...";
    	$postfields["Route1"] =  "...";
    	$postfields["Route2"] =  "...";
    	$postfields["NoPax"] =  "...";
     
    	$headers = array();	
    	$headers[0] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
    	$headers[] = "Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3";
    	$headers[] = "Accept-Encoding: gzip,deflate";
    	$headers[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
    	$headers[] = "Keep-Alive: 300";
    	$headers[] = "Connection: keep-alive";
    	$headers[] = "Content-length:".count($postfields);
     
    	//url de la page de soumission
    	$url = "http://www....";
    	$useragent = "Mozilla/5.0";
    	$referer = "http://www....\r\n";
     
    	//Initialise une session CURL
    	$ch = curl_init($url);
    	//CURL options
    	//on défini les entetes de la requete http pour lui donner un content-lenght
    	curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    	//On poste les données du tableau $postfields
    	curl_setopt($ch, CURLOPT_POST, 1);
    	curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
    	//On définit un useragent ici Mozilla/5.0
    	//souvent les bots se font passés pour googlebot ce qui finalement est stupide
    	//On passe donc un useragent banal
    	curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    	//On passe un referrer ici on passe la même page $url
    	curl_setopt($ch, CURLOPT_REFERER, $referer);
    	//on récupère le contenu de la page de résultat de la soumission dans une chaine
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     
    	//Page de résultats et fermeture de session
    	$result = curl_exec($ch);
    	curl_close($ch);
     
    	//on peut faire un echo du résultat obtenu
    	echo $result;
    ?>
    si jamais je ne met pas \r\n a la fin de mon referer j'obtien cette erreur :
    The following problem has been reported:

    * Your specified referrer company code could not be accepted

    et du coup jai essayer avec et mon message d'erreur change et j'obtien :
    Length Required

    je pense du coup qu'il mes les fauts et jai regarder pour l'entete de curl et j'ai vu que l'on pouvait les passer des parametres donc j'ai pensez a lui donnée un content-length qui est sensé regler les erreur http 411, mais la sa ne fonctionne pas.


    A tu une idée de ce que pourrais faire pour eviter cette erreur ??

    Merci pour ton aide

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    L'erreur 413 est tout à fait normal puisque vous avez indiqué une valeur totalement fausse au niveau de l'entête Content-Length :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $headers[] = "Content-length:".count($postfields);
    Sans cela ça a l'air de fonctionner, je récupère bien ces entêtes côté serveur :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    User-Agent: Mozilla/5.0
    Host: localhost
    Referer: http://www.developpez.com
    Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Content-Length: 1451
    Expect: 100-continue
    Content-Type: multipart/form-data; boundary=----------------------------c3674d5e0717
    Je ferais remarquer, que l'entête Content-Length, ce n'est pas moi qui l'ait indiqué.


  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Par défaut
    Heu d'accord mais qu'est ce que je dois mettre dans mon content-length car ce n'est pas une valeur comme 200 car j'ai aussi essayer et sa ne marche pas plus et on ne peut pas faire de strlen d'un tableau ??

    Merci pour ton aide.

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Vous l'oubliez tout simplement. C'est la bibliothèque cURL (voir PHP) qui s'occupera de la renseigner de manière convenable.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Par défaut
    Alors pourquoi quand je fais mon test je recupere l'erreur 411 qui est justement un probleme de content-length ???

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    En ce cas vérifiez les entêtes envoyées en simulant le serveur sur le vôtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    function my_implode($array) {
        $str = '';
        foreach ($array as $k => $v) {
            $str .= $k . ': ' . $v . PHP_EOL;
        }
        return $str;
    }
     
    print_r($_POST);
     
    echo str_repeat(5, PHP_EOL);
     
    echo my_implode(getallheaders());
    Mais il m'est déjà arrivé d'avoir un "bug" (qui n'a rien à voir avec cette situation) lors de l'usage d'un tableau au niveau de l'option CURLOPT_POSTFIELDS. Essayez éventuellement de la transmettre sous la forme, alternative, d'une chaîne (via la fonction httpd_build_query - PHP 5 uniquement). Ce qui vous permettra d'expliciter, de manière correcte cette fois, l'entête content-length.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Par défaut
    Ok j'ai essayer mais sa me met le message erreur que voila :

    Fatal error: Call to undefined function getallheaders() in /home/www/client/www/buzznership/test_form/validation_form_aferry.php on line 40

    j'ai juste ajouter cette partie dans mon code deja existant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	function my_implode($postfields) 
    	{
    	    $str = '';
    	    foreach ($postfields as $k => $v) 
    		{
    	        $str .= $k . ': ' . $v . PHP_EOL;
    	    }
    	    return $str;
    	}
     
    	echo str_repeat(5, PHP_EOL);
     
    	echo my_implode(getallheaders());
    J'utilsie bien php5 je ne comprend pas pourquoi sa ne fonctionne pas ??

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Par défaut
    Je vien dessayer de la sorte

    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
    24
    25
    26
    27
    28
    29
    30
    31
     
    <?php
     
    	$data = "action=...&RoutePost=...&hidRoute1=...&hidRoute2=...&hidRoute3=&hidRoute4=&hidNoPax=...&hidCurrency=...&hidHomeURL=...&TripType=...&hidReferComp=...&Route1=...&Route2=...&NoPax=...";
     
    	//url de la page de soumission
    	$url = "http://www...";
    	$useragent = "Mozilla/5.0";
    	$referer = "http://www...\r\n";
     
    	//Initialise une session CURL
    	$ch = curl_init($url);
    	//CURL options
    	curl_setopt($ch, CURLOPT_POST, 1);
    	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    	//On définit un useragent ici Mozilla/5.0
    	//souvent les bots se font passés pour googlebot ce qui finalement est stupide
    	//On passe donc un useragent banal
    	curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    	//On passe un referrer ici on passe la même page $url
    	curl_setopt($ch, CURLOPT_REFERER, $referer);
    	//on récupère le contenu de la page de résultat de la soumission dans une chaine
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     
    	//Page de résultats et fermeture de session
    	$result = curl_exec($ch);
    	curl_close($ch);
     
    	//on peut faire un echo du résultat obtenu
    	echo $result;
    ?>
    j'obtien toujours cette erreur de m... Length Required j'ai essayer en laissant le header mais sa ne change rien donc je crois qu'il me reste plus que le suicide non je plaisante mais je comprend pas pourquoi j'obtien cette erreur a la c....

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Par défaut
    Salut bon je pense avoir trouvé pourquoi j'ai un pb avec mon content-length enfaite j'ai verifié mes headers et je passe par tu get et non par du post c pour sa que je n'ai pas de content-length.

    Pourtant dans mon code j'ai ceci curl_setopt($ch, CURLOPT_POST, true);
    du coup je devrai avoir une requete en post.

    A tu une idee de pourquoi sa me fais sa ?????

Discussions similaires

  1. Requête POST du cURL au pecl_http
    Par pointeur dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 06/08/2011, 14h47
  2. [XML] Réponse à la requête POST VIA XML
    Par cilv1 dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 01/02/2006, 11h18
  3. [Socket] Réponse à la requête POST
    Par cilv1 dans le forum Langage
    Réponses: 4
    Dernier message: 20/10/2005, 18h18
  4. Comment envoyer une requête POST via HTTP ?
    Par pdtor dans le forum C++
    Réponses: 2
    Dernier message: 13/09/2005, 05h54
  5. Analyse de code HTML en réponse a une requête post.
    Par ghost942 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/06/2005, 21h40

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