使用CURL提交表单

时间:2012-08-30 20:25:11

标签: php curl

如何使用提交按钮上没有名称属性的curl提交表单?

例如,目标站点具有以下提交按钮:

<input id='some' value='value' type='submit' >

这就是我所拥有的:

$post_data['name'] = 'xyz';
$post_data['some'] = 'value';

foreach ( $post_data as $key => $value) {
            $post_items[] = $key . '=' . $value;
        }
        //create the final string to be posted using implode()
        $post_string = implode ('&', $post_items);

    $ch = curl_init($web3);
        //set options
        //curl_setopt($ch, CURLOPT_COOKIESESSION, true);
        curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile); 
        curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); 
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch, CURLOPT_USERAGENT,
          "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
        //curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        //set data to be posted
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
        //perform our request
        $result = curl_exec($ch);

2 个答案:

答案 0 :(得分:3)

您(通常)不需要编码$post_data下面的代码会提交表单。

按钮不是必需的。当curl_exec运行时,服务器会收到相当于填充表单(假设post_data正确)。

如果操作没有继续,则会丢失某个字段,或者会话中的某些字段。尝试使用cURL打开与显示表单相同的页面,然后提交表单。

$post_data['name'] = 'xyz';
$post_data['some'] = 'value';

$ch = curl_init();
//set options
//curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_USERAGENT,
      "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

//set data to be posted
curl_setopt($ch,CURLOPT_POST, true);

// Note -- this will encode using www-form-data
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

curl_setopt($ch, CURLOPT_URL, $web3);

$result = curl_exec($ch);

<强>更新

让我们看看正常情况以及cURL会发生什么:

   Browser                          cURL
1. Goes to www.xyz.com/form         curl_exec's a GET on www.xyz.com/form
2. Server sends HTML                Server sends HTML
3. User types in fields             We populate $post_data
4. User clicks "SUBMIT"             We run curl_exec and POST $post_data
5. Browser contacts server          cURL contacts server
6. Browser sends fields             cURL sends fields
7. Server acts upon request         Server acts upon request
8. Profit                           Profit

上面的代码只实现了阶段3-6。第2阶段也可能发送会话cookie并设置第7阶段所需的一些数据。因此,在成功之前,您还需要使用另一个curl_exec(可能是GET方法)实现阶段1执行以下阶段。

答案 1 :(得分:2)

根本不提供输入表单字段的名称 - 浏览器实际上会为您做什么。