Page 1 sur 1

erreur dans formulaire CURL

Posté : 13 avr. 2010, 15:12
par epimagique
Bonjour,

Je tente de récupérer une page qui s'affiche normalement en validant un formulaire sur un site distant.
J'ai créé un formulaire en local qui fonctionne (quand je le valide, je récupère bien le résultat)
J'essaie de faire que ce formulaire soit envoyé par CURL pour en récupérer la page en retour dans une variable. Malheureusement, je n'arrive pas à le faire fonctionner.

Voici mon code, si qq1 trouve la différence entre les deux et peut m'expliquer mon erreur... ?
<FORM method='POST' action="http://notamweb.aviation-civile.gouv.fr/Script/IHM/Bul_Aerodrome.php">
<INPUT type='hidden' name='bResultat' value='true'>
		<INPUT type='hidden' name='bImpression' value=''>
		<INPUT type='hidden' name='ModeAffichage' value='COMPLET'>
		<INPUT type='text' name='AERO_Date_DATE' id='AERO_Date' value='2010/04/13'>
		<INPUT class='DesciptionCritere' name='AERO_Date_HEURE' value='15:00'>
		<INPUT type='hidden' name='AERO_Langue' value='FR'>
		<INPUT name='AERO_Duree' value='96'>
		<br />
		VFR/IFR<INPUT name='AERO_CM_REGLE' type='radio' value='1' ><br />
		IFR<INPUT name='AERO_CM_REGLE' type='radio' value='2' ><br />
		VFR<INPUT name='AERO_CM_REGLE' type='radio' value='3' checked><br />
		<br />
		<INPUT name='AERO_CM_GPS' type='radio' value='1' ><br />
		<INPUT name='AERO_CM_GPS' type='radio' value='2' checked ><br />
		<br />
		<INPUT name='AERO_CM_INFO_COMP' type='radio' value='1' checked ><br />
		<INPUT name='AERO_CM_INFO_COMP' type='radio' value='2' ><br />
		<br />
		<INPUT type='text' name='AERO_Tab_Aero[0]' size='7' maxlength='4' value='LFQO' ><br />
		<INPUT type='submit' value='Complet'>
		</FORM>
$post_data = array(
	'bResultat' => 'true',
	'bImpression' => '',
    'ModeAffichage' => 'COMPLET',
    'AERO_Date_DATE' => '2010/04/13',
    'AERO_Date_HEURE' => '15:00',
    'AERO_Langue' => 'FR',
    'AERO_Duree' => '96',
    'AERO_CM_REGLE' => '3',
    'AERO_CM_GPS' => '2',
    'AERO_CM_INFO_COMP' => '1',
    'AERO_Tab_Aero' => array(0 => 'LFQO')
);

print_r($post_data);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://notamweb.aviation-civile.gouv.fr/Script/IHM/Bul_Aerodrome.php");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADERS,array('Content-Type: multipart/form-data'));
$page = curl_exec($curl);
curl_close($curl);
echo $page;
Merci pour votre aide !

Epi

Re: erreur dans formulaire CURL

Posté : 13 avr. 2010, 15:45
par Nours312
je peux me tromper, mais j'ai pas le souvenir d'avoir utilisé :

curl_setopt($curl, CURLOPT_HTTPHEADERS,array('Content-Type: multipart/form-data'));

pour envoyer des données en POST via cUrl !... testes en virant cette ligne ;)

Re: erreur dans formulaire CURL

Posté : 13 avr. 2010, 15:52
par epimagique
Je l'ai enlevé, mais sans plus de résultat...

Pour être précis, je reçois bien la page du serveur distant, mais c'est une page d'erreur.
Je me dis que mon formulaire Curl doit être différent (en-tête, données POST ?) du formulaire html puisque sinon le serveur me renverrait la bonne page...

Re: erreur dans formulaire CURL

Posté : 13 avr. 2010, 18:52
par enneite
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
ça en tous cas ça ne va pas car ton post_data c'est un tableau alors que cela devrait être une chaine de caractères de la forme:

"var1=a&var2=b&var3=c";

tu peux utiliser la fonction http_build_query($tableau) pour transformer un tableau en requete HTTP, mais fais bien attention, il vaut mieux utiliser un tableau unidimensionnel pour cela (ce qui n'est pas le cas de ton $post_data me semble-t-il)

Du coup, retravailles ton $post_data pour qu'il soit unidimensionnel, puis transforme le en requete HTTP grace à http_build_query();
$post=http_build_query($post_data_unidimensionnel);
C'est cette variable que tu passera en paramètre CUROPT_POSTFIELDS

curl_setopt($curl, CURLOPT_POSTFIELDS, $post);

Re: erreur dans formulaire CURL

Posté : 19 avr. 2010, 22:30
par epimagique
Bonjour,

En fait je ne peux pas modifier ce qu'attend le serveur... donc un tableau multi-dimensionnel.

Y'a un truc, mais quoi... ?

Re: erreur dans formulaire CURL

Posté : 19 avr. 2010, 22:34
par stealth35
Bonjour,

En fait je ne peux pas modifier ce qu'attend le serveur... donc un tableau multi-dimensionnel.

Y'a un truc, mais quoi... ?
tu modifies rien avec 'http_build_query', le tableau multidimensionnel est dedans quand même

Re: erreur dans formulaire CURL

Posté : 19 avr. 2010, 22:37
par epimagique
C'est fait, mais toujours sans le retour attendu du serveur.

Re: erreur dans formulaire CURL

Posté : 19 avr. 2010, 22:40
par stealth35
C'est fait, mais toujours sans le retour attendu du serveur.
ta regardé les erreurs CURL ?
essaye de rajouter un CURLOPT_FOLLOWLOCATION

Re: erreur dans formulaire CURL

Posté : 19 avr. 2010, 22:42
par epimagique
Il ne faut pas inclure un bouton submit dans les données envoyées para hasard ???

Re: erreur dans formulaire CURL

Posté : 19 avr. 2010, 22:48
par epimagique
Voici le résultat :
http://www.eskapad.com/double/post_LFQO%20CURL.php

le script est le suivant :
$post_data = array(
	'bResultat' => 'true',
	'bImpression' => '',
    'ModeAffichage' => 'COMPLET',
    'AERO_Date_DATE' => date("Y/m/d"),
    'AERO_Date_HEURE' => date("H:m"),
    'AERO_Langue' => 'FR',
    'AERO_Duree' => '96',
    'AERO_CM_REGLE' => '3',
    'AERO_CM_GPS' => '2',
    'AERO_CM_INFO_COMP' => '1',
    'AERO_Tab_Aero'	=> array(0 => 'LFQO')
);

$post_data=http_build_query($post_data);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://notamweb.aviation-civile.gouv.fr/Script/IHM/Bul_Aerodrome.php");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1);
$page = curl_exec($curl);
curl_close($curl);
echo $page;

Re: erreur dans formulaire CURL

Posté : 19 avr. 2010, 22:49
par stealth35
la on a une erreur apache pas PHP

EDIT : il attend peu etre un User-Agent...
RE-EDIT : manque un user-agent :wink:
curl_setopt($curl, CURLOPT_USERAGENT, 'PHP');

Re: erreur dans formulaire CURL

Posté : 19 avr. 2010, 22:56
par epimagique
Toi, je t'aime !!

Merci, c'était ça !!

Re: erreur dans formulaire CURL

Posté : 19 avr. 2010, 23:00
par stealth35
:wink:
apres si tu veux récupérer les données utiliseDomDocument