嗨,我试图使用CURL在一个网站上发布一些数据。发布过程分为3个步骤。1.输入URL,提交并转到第二步,其中某些字段已经完成。2.在输入更多数据并预览表单后,再次提交。3.提交最终数据。
问题是,在第二步之后,表单数据如下所示
POSTDATA =-----------------------------12249266671528
Content-Disposition: form-data; name="title"
Filme 2010, filme 2009, filme noi, programe TV, program cinema, premiere cinema, trailere filme - CineMagia.ro
-----------------------------12249266671528
Content-Disposition: form-data; name="category"
3
-----------------------------12249266671528
Content-Disposition: form-data; name="tags"
filme, programe tv, program cinema
-----------------------------12249266671528
Content-Disposition: form-data; name="bodytext"
Filme 2010, filme 2009, filme noi, programe TV, program cinema, premiere cinema, trailere filme
-----------------------------12249266671528
Content-Disposition: form-data; name="trackback"
-----------------------------12249266671528
Content-Disposition: form-data; name="url"
http://cinemagia.ro
-----------------------------12249266671528
Content-Disposition: form-data; name="phase"
2
-----------------------------12249266671528
Content-Disposition: form-data; name="randkey"
9510520
-----------------------------12249266671528
Content-Disposition: form-data; name="id"
17753
-----------------------------12249266671528--我被卡住了,试图设计一个算法,为第二步生成这种POST数据。顺便提一句,表单的URL永远不会改变。它总是:http://www.xxx.com/submit。只有一个称为“阶段”的隐藏输入,它根据我当前所处的步长而变化(阶段= 1,阶段= 2,阶段= 3)。任何帮助,无论是代码,伪代码或只是指导,都将非常感谢。
到目前为止我的代码如下:
function postBlvsocialbookmarkingcom($curl,$vars) {
extract($vars);
$baseUrl = "http://www.blv-socialbookmarking.com/";
//step 1: login
$curl->setRedirect();
$page = $curl->post ($baseUrl.'login.php?return=/index.php', array ('username' => $username, 'password' => $password, 'processlogin' => '1', 'return' => '/index.php'));
if ($err = $curl->getError ()) {
return $err;
}
//post step 1----
//get random key
$page = $curl->post($baseUrl.'/submit', array());
$randomKey = explode('<input type="hidden" name="randkey" value="',$page);
$randKey = explode('"',$randomKey[1]);
//-------------------------------------
$page = $curl->post($baseUrl.'/submit', array('url'=>$address,'phase'=>'1','randkey'=>$randKey[0],'id'=>'c_1'));
if ($err = $curl->getError ()) {
return $err;
}
//echo $page;
//
//post step 2
$page = $curl->post ($baseUrl.'/submit', array ('title' => $title, 'category'=>'1', 'tags' => $tags, 'bodytext' => $description, 'phase' => '2'));
if ($err = $curl->getError ()) {
return $err;
}
echo $page;
//post step 3
$page = $curl->post ($baseUrl.'/submit', array ('phase' => '3'));
if ($err = $curl->getError ()) {
return $err;
}
echo $page;
}发布于 2010-04-24 05:55:17
要正确跟踪这一点,请使用LiveHTTPHeaders之类的工具,并记录使用浏览器进行的完整的“手动”会话。
然后,您可以使用curl尽可能接近地模拟该记录的会话。注意cookies,referer,user-agent等以及post字段。
发布于 2010-05-08 03:02:13
在发送分块数据时,边界用作每个字段之间的分隔符。这些边界是由cURL自动创建的,您不需要担心它们。您只需将post参数作为数组发送,并将Content-Type头设置为multipart/form-data。
https://stackoverflow.com/questions/2579074
复制相似问题