如何使用提交按钮上没有名称属性的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);
答案 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)
根本不提供输入表单字段的名称 - 浏览器实际上会为您做什么。