CURL + POST + multipart/form-data
Je suis en train de gratter un site web en utilisant PHP, CURL et de la méthode POST pour envoyer un formulaire avant de le web raclage de la page. Le problème que je rencontre est qu'il est connecté avec la méthode POST: aucune donnée n'est présentée pour le serveur, de sorte que la raclée page web ne contient pas de ce que je suis à la recherche d'.
J'ai quitté assurer que le problème est lié à la forme type: enctype="multipart/form-data".
Comment puis-je gérer ce POSTE demande, considérant que la forme est de type multipart/form-data?
Dois-je coder le post_string d'une manière spéciale?
Voici le code que j'utilise:
function curl($url) {
//POST string
$post_string="XXXX";
$options = Array(
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_AUTOREFERER => TRUE,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
CURLOPT_USERAGENT => "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1a2pre) Gecko/2008073000 Shredder/3.0a2pre ThunderBrowse/3.2.1.8",
CURLOPT_URL => $url,
CURLOPT_CAINFO => dirname(__FILE__)."/cacert.pem",
CURLOPT_POSTFIELDS => $post_string,
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$data = curl_exec($ch);
curl_error($ch);
curl_close($ch);
return $data;
}
$scraped_page = curl("XXXURLXXX");
echo $scraped_page;
Merci!
OriginalL'auteur user3352382 | 2014-02-26
Vous devez vous connecter pour publier un commentaire.
Définir la CURLOPT_POST vrai:
Puis remplissez votre message champs comme ceci 'setup':
Le manuel PHP
Firebug ne sera pas montrer le vrai POST que ce qui se passe "à l'intérieur" le PHP de l'exécution, pas à l'intérieur de la "production" de la page. Ajoutez les lignes suivantes à votre PHP, après le $data = curl_exec($ch); ==> var_dump(curl_getinfo($ch)); Et de voir ce qui va le montrer.
Ah, ok, merci, mais la page qui est "fait écho à" montre encore la forme vide, et aucun résultat..
Hmm. Certaines personnes recommandent de faire de ce, sans que l'http_build_query fonction: CURLOPT_POSTFIELDS => $postfields Et j'ai trouvé pourquoi: nl1.php.net/curl_setopt "Si la valeur est un tableau, le header Content-Type sera défini comme "multipart/form-data".
Excellent travail, merci! code téléchargé!
OriginalL'auteur KoalaBear
Oui, $post_string doit être un tableau.
Également définir CURLOPT_POST de vrai.
OriginalL'auteur Alix Axel