首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >curl multipart/form-data帮助

curl multipart/form-data帮助
EN

Stack Overflow用户
提问于 2010-04-05 23:05:26
回答 2查看 2.5K关注 0票数 2

嗨,我试图使用CURL在一个网站上发布一些数据。发布过程分为3个步骤。1.输入URL,提交并转到第二步,其中某些字段已经完成。2.在输入更多数据并预览表单后,再次提交。3.提交最终数据。

问题是,在第二步之后,表单数据如下所示

代码语言:javascript
复制
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)。任何帮助,无论是代码,伪代码或只是指导,都将非常感谢。

到目前为止我的代码如下:

代码语言:javascript
复制
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;

}
EN

回答 2

Stack Overflow用户

发布于 2010-04-24 05:55:17

要正确跟踪这一点,请使用LiveHTTPHeaders之类的工具,并记录使用浏览器进行的完整的“手动”会话。

然后,您可以使用curl尽可能接近地模拟该记录的会话。注意cookies,referer,user-agent等以及post字段。

票数 1
EN

Stack Overflow用户

发布于 2010-05-08 03:02:13

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2579074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档