Comment simuler navigateur méthode POST de formulaire à l'aide de PHP/cURL
Je suis en train de simuler navigateur avec POST
méthode à l'aide de PHP/cURL.
Quand j'ai regardé le live en-tête Http, il montre Content-Type: multipart/form-data
.
J'ai vérifié sur internet où il a été suggéré que cURL envoyer multipart/form-data
lorsqu'un des en-têtes personnalisés est spécifié à Content-Type: multipart/form-data
.
$headers = array(
'Content-Type' => 'multipart/form-data; boundary='.$boundary
);
Cela n'a pas fonctionné pour moi non plus quand je print_r(curl_getinfo ()), il a montré
[content_type] => text/html; charset=UTF-8
Qui signifie cURL envoyé une en-têtes par défaut
J'ai aussi lu que l'envoi/téléchargement d'un fichier avec cURL cause les données à envoyer en tant que multipart/form-data
. J'ai créé un fichier qui curl téléchargé mais encore une fois quand j'ai couru curl_getinfo
j'ai eu [content_type] => text/html; charset=UTF-8
$data_array = array("field" => "@c:\file_location.txt");
J'ai aussi essayé de lire un fichier de contenu de sorte que la seule chose envoyés serait content de ne PAS FICHIER JOINT mais cela n'a pas fonctionné pour moi curl_getinfo montre [content_type] => text/html; charset=UTF-8
.
$data_array = array("field" => "<c:\file_location.txt"); //note @ replaced with <
Me manque quelque chose ici?
C'est le referer
url
POST chemin HTTP/1.1 Host: www(dot)domaine(dot)com User-Agent: Mozilla/5.0 (Windows) Gecko/13081217 Firefox/3 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: url/some-file.php Content-Type: multipart/form-data; limite=--------------------------$limite Content-Length: $some_number ----------------------------$limite Content-Disposition: form-data; name="$some_Value1" $some_text1 ----------------------------$limite Content-Disposition: form-data; name="$some_Value2" $some_text2 ----------------------------$limite Content-Disposition: form-data; name="$some_Value3" $some_text3 ----------------------------$limite Content-Disposition: form-data; name="$some_Value4" $some_text4 ----------------------------$limite Content-Disposition: form-data; name="$some_Value5" $some_text5 ----------------------------$limite Content-Disposition: form-data; name="$some_Value6" $some_text6 ----------------------------$limite Content-Disposition: form-data; name="$some_Value7" $some_text7 ----------------------------$limite Content-Disposition: form-data; name="$some_Value8" $some_text8 ----------------------------$limite Content-Disposition: form-data; name="$some_Value9" ----------------------------$limite Content-Disposition: form-data; name="$some_Value10" ----------------------------$limite--
Voici un morceau de code.
<?
//Include files
set_time_limit(0);
include'body.php';
include'keyword.php';
include'bio.php';
include'summary.php';
include'headline.php';
include'category.php';
include'spin.php';
include'random-text.php';
$category = category();
$headline = headline() ;
$summary = summary();
$keyword = keyword();
$body = body();
$bio = bio();
$target="url";
$ref ="url_ref";
$c = "Content-Disposition: form-data; name=";
$boundary = "---------------------------".random_text();
$category = category();
$headline = headline() ;
$summary = summary();
$keyword = keyword();
$body = body();
$bio = bio();
//emulating content form as it appears on livehttp header
$data = "\r\n".$boundary."\r\n".$c."\"pen_id\"\r\n\r\n".$Auth_id."\r\n".$boundary."\r\n".$c."\"cat_id\"\r\n\r\n".category()."\r\n".$boundary."\r\n".$c."\"title\"\r\n\r\n".headline()."\r\n".$boundary."\r\n".$c."\"meta_desc\"\r\n\r\n".summary()."\r\n".$boundary."\r\n".$c."\"meta_keys\"\r\n\r\n".keyword()."\r\n".$boundary."\r\n".$c."\"content\"\r\n\r\n".body()."\r\n".$boundary."\r\n".$c."\"author_bio\"\r\n\r\n".bio()."\r\n".$boundary."\r\n".$c."\"allow_comments\"\r\n\r\ny\r\n".$boundary."\r\n".$c."\"id\"\r\n\r\n\r\n".$boundary."\r\n".$c."\"action\"\r\n\r\n\r\n".$boundary."--\r\n";
//inserting content into a file
$file = "C:\file_path.txt";
$fh = fopen($file, 'w+') or die("Can't open file");
fwrite($fh,$data);
fclose($fh);
//pulling out content from a file as multipart/form-data
$data_array = array ("field" => "<C:\file_path.txt");
$headers = array (
'POST /myhome/article/new HTTP/1.1',
'Host: url',
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20 (.NET CLR 3.5.30729)',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9;q=0.8',
'Accept-Language: en-us,en;q=0.5',
'Accept-Encoding: gzip,deflate',
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'Keep-Alive: 300',
'Connection: keep-alive',
'Content-Type: multipart/form-data; boundary='.$boundary,
'Content-Length: '.strlen($data),
);
# Create the cURL session
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target); //Define target site
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_HEADER, $headers); //No http head
//curl_setopt($ch, CURLOPT_REFERER, $ref);
curl_setopt($ch, CURLOPT_NOBODY, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //Return page in string
curl_setopt($ch, CURLOPT_COOKIEJAR, "c:\cookie\cookies.txt"); //Tell cURL where to write
curl_setopt($ch, CURLOPT_COOKIEFILE, "c:\cookie\cookies.txt"); //Tell cURL which cookies
//curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$data_array");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); //Follow redirects
curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
# Execute the PHP/CURL session and echo the downloaded page
$page = curl_exec($ch);
$err = curl_error($ch);
$info =curl_getinfo($ch);
# Close the cURL session
curl_close($ch);
print_r($err);
print_r($info);
?>
- Voir stackoverflow.com/search?q=post+curl
- Balus... merci pour le lien mais j'ai regardé sur le net pour les jours sans aucun succès... les liens que vous avez posté ne résout pas mon problème
- Je n'ai pas posté les liens. Vous devez me confondre avec quelqu'un d'autre.
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas posté cohérente et cohérente sur les flux de code. Est le bit à la fin ce que vous attendez? Ou quelque chose d'autre?
Tu dis que "ça ne marche pas" - désolé, mais nous avons besoin d'un beaucoup plus d'informations pour être en mesure pour vous aider à diagnostiquer le problème.
Y avait-il un message d'erreur?
Ce qui sont que vous essayez d'afficher le fichier?
Est-ce que l'URL de travailler avec un formulaire HTTP?
Pouvez-vous fournir un exemple de la forme, il fonctionne avec?
Vous faire contrôler le code à la fin de réception?
Comment savez-vous qu'il "ne fonctionne pas"?
Obtenez-vous un message d'erreur? Si oui, quoi?
L'opération devrait être aussi simple que:
Le mauvais chemin peut exaplin pourquoi curl_getinfo() n'est pas vous dire à quoi vous vous attendez à voir - à la recherche à l'échange de données pourrait être beaucoup plus utile.
C.
Essayez d'utiliser
exec
à partir de PHP pour appeler la LIGNE de COMMANDE VERSION DE CURL..Pour télécharger un fichier, cela a fonctionné pour moi..
Exemple:
Un Formulaire en ligne a une zone de saisie avec le nom 'Filedata' utilisé pour télécharger un fichier sur leur serveur
Et je veux le télécharger
myImage.jpg
Donc sur un Linux en ligne de commande,
(En supposant que dans le dossier de
myImage.jpg
)Si cela fonctionne, vous pouvez appeler à partir de php en utilisant quelque chose comme