您好我正在尝试使用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;
}
答案 0 :(得分:1)
要正确跟踪此情况,请使用LiveHTTPHeaders等工具,并记录您使用浏览器执行的完整“手动”会话。
然后,您将使用curl尽可能地模仿记录的会话。注意cookie,引用者,用户代理等以及帖子字段。
答案 1 :(得分:1)
发送多部分数据时,边界用作每个字段之间的分隔符。这些边界由cURL自动创建,您不必担心它们。您只需将post参数作为数组发送,并将 Content-Type 标头设置为multipart / form-data。