curl multipart / form-data帮助

时间:2010-04-05 15:05:26

标签: php curl

您好我正在尝试使用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;

}

2 个答案:

答案 0 :(得分:1)

要正确跟踪此情况,请使用LiveHTTPHeaders等工具,并记录您使用浏览器执行的完整“手动”会话。

然后,您将使用curl尽可能地模仿记录的会话。注意cookie,引用者,用户代理等以及帖子字段。

答案 1 :(得分:1)

发送多部分数据时,边界用作每个字段之间的分隔符。这些边界由cURL自动创建,您不必担心它们。您只需将post参数作为数组发送,并将 Content-Type 标头设置为multipart / form-data。