cURL, POSTFIELDS et name[].

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : cURL, POSTFIELDS et name[].

par Sékiltoyai » 25 juil. 2008, 00:25

Mais sinon, bravo à Sékil, ça marche.
Facile :p

par Hywan » 24 juil. 2008, 23:51

Hey :),

Alors, WDDX n'est pas installé sur toutes les machines, et je dois faire un script exportable, donc solution à écarter.

J'ai pensé à JSON, mais trop tard, j'avais déjà refait tout mon code version manuel (fsockopen, et tout le toutime).

Mais sinon, bravo à Sékil, ça marche. Je n'y avais pas pensé du tout alors que pourtant … c'est tout bête :roll:.
Voici le test : a.php :
<?php

header('Content-type: text/plain');

$c = curl_init();
$d = 'a=b&c=d&var[machin]=truc&var[bidule]=chose';

curl_setopt($c, CURLOPT_URL, 'http://domain.tld/curl/b.php');
curl_setopt($c, CURLOPT_HEADER, true);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_VERBOSE, true);
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $d);

$out = curl_exec($c);
var_dump($out);

curl_close($c);
Et la page qui reçoit les données b.php :
<?php

header('Content-type: text/plain');

echo 'hello' . "\n";

print_r($_POST);
Ça marche donc. Ne pas oublier d'encoder l'ensemble des clés et valeurs avec url_encode().

Voilà, merci :). Sujet résolu ;-).
J'ai toutefois une dernière question : pensez-vous que CURL est présent sur la majorité des plates-formes ? J'ai réalisé le script via fsockopen pour être vraiment sûr, mais je suis presque persuadé que CURL est disponible partout (sur toutes les plates-formes professionnelles digne de ce nom du moins …).

par Cyrano » 24 juil. 2008, 17:53

:idea: Et pourquoi pas sérialiser ton tableau en JSON (json_encode() ), envoyer la chaine et faire l'opération inverse à l'arrivée (json_decode()) ?

par Sékiltoyai » 23 juil. 2008, 23:40

Essaye var[machin]=truc&var[machin2]=truc2…

par Alf » 23 juil. 2008, 23:01

comment on fait pour convertir un tableau de tableau en chaîne ?
Si j'ai bien compris ton probléme alors j'ai trouvé ça.
Avec WDDX http://fr2.php.net/manual/fr/book.wddx.php
Tu peut sérialiser des tableaux entre autres et dé sérialiser aussi vite.
<?php

$h_panier = array ( "fruits" => array ( "a" => "orange", "b" => "babanes", "c" => "pommes" ),
                    "cereales" => array ( "a" => "mais", "b" => "ble", "c" => "orge" ) );

$o_wddx = wddx_packet_start("panier");
wddx_add_vars($o_wddx, "h_panier");
$s_panier = wddx_packet_end($o_wddx);

echo $s_panier;

?>
donne une chaine XML sans fioritures
<wddxPacket version='1.0'><header><comment>panier</comment></header><data>...</data></wddxPacket>
et aprés un Tidy

Code : Tout sélectionner

<wddxPacket version='1.0'> <header> <comment>panier</comment> </header> <data> <struct> <var name='h_panier'> <struct> <var name='fruits'> <struct> <var name='a'> <string>orange</string> </var> <var name='b'> <string>babanes</string> </var> <var name='c'> <string>pommes</string> </var> </struct> </var> <var name='cereales'> <struct> <var name='a'> <string>mais</string> </var> <var name='b'> <string>ble</string> </var> <var name='c'> <string>orge</string> </var> </struct> </var> </struct> </var> </struct> </data> </wddxPacket>
Une petite question sur ta fonction curl, elle fait une requette http en envoyant des données post au serveur et sort le le resultat sous formes de chaine, c'est ça ?

cURL, POSTFIELDS et name[].

par Hywan » 21 juil. 2008, 16:14

Hey :),

Je suis bloqué sur un truc de fou furieux. Soit j'ai rien compris à l'histoire, soit les types qui ont conçu cURL ont oublié une énorme partie …

J'ai une page qui reçoit des données POST directement depuis un formulaire. Je dois effectuer des traitements et les renvoyer sur une autre page en POST. Bon, je fais un truc du genre :
$post = /* traitement de $_POST */;

$c = curl_init('http://localhost/Dir/FormHandler.php');
curl_setopt($c, CURLOPT_HEADER,         false);
curl_setopt($c, CURLOPT_POST,           true);
curl_setopt($c, CURLOPT_POSTFIELDS,     $post);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$o = curl_exec($c);
curl_close($c);

var_dump($o);
Ça c'est ok, mais attention, imaginons un instant que j'utilise name="truc[]" dans mon formulaire. Je vais forcément avoir un tableau de tableau. Comme $post sera converti en chaîne, c'est à dire que Array(a => b, c => d) sera converti vers a=b&c=d, comment on fait pour convertir un tableau de tableau en chaîne ? Et bin on ne peut pas …

Alors là je sèche un peu. J'ai essayé plusieurs choses, j'ai bien du mal.

S'il n'y a pas de solution, je pensais me rabattre sur fsockopen et fputs (à l'ancienne ;-)) et j'écrirais toutes mes en-têtes manuellement, mais utiliser cURL serait tout de même plus simple non ?