2010-04-05 54 views
2

您好,我想使用CURL在网站上发布一些数据。发布过程有3个步骤。 1.输入一个网址,提交并进入第二步,某些字段已经完成 2.再次提交,输入更多数据并预览表格后。 3.提交最终数据。curl multipart /表单数据帮助

的问题是,在第二步骤之后,表单数据看起来像这样

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

你能粘贴你的代码吗? – MANCHUCK 2010-04-05 15:10:15

+0

我编辑了我原来的帖子,看看。 – user253530 2010-04-05 15:15:25

回答

1

要正确地跟踪下来,请使用类似的LiveHTTPHeaders的工具,记录您与您的浏览器做一个完整的“手册”会议。

然后,您将尽可能使用curl来模拟录制的会话。注意cookies,引用者,用户代理等以及帖子字段。

1

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