我想填写一个表单字段并使用CURL提交它。网页有很多表单字段已填充,所以我不想触及这些字段。
那么是否可以使用curl并填充仅必填字段并将其与所有其他已填充的字段一起提交?
答案 0 :(得分:2)
取决于最初填充表单的方式。
如果预先填充的元素全部使用value="foo"
,则只需抓取页面(使用curl),将其加载到DOMDocument中,获取您之后的<form>
并填充该字段( s)您需要,然后使用新的cURL请求将其作为另一个请求传递(考虑到表单的action
和method
属性,以及发送的表单数据)。
但是,如果他们填充了JS并且您不打算编写cURL请求以模仿您在浏览器上执行的操作,我看不到一种简单的方法来模仿JS操作,然后填充,然后发送它。
此外,这不会考虑可能存在的任何cookie。如果您需要这些,您将不得不在第一次请求时存储它们,并确保在实际的提交呼叫中将它们发送出去。
答案 1 :(得分:2)
要自定义,只需在$fields_i_want
数组中添加字段名称,即可指定要从下载的源文本中提取的所有文本字段值,并更改检索和提交位置的URL。
此外,file_get_contents()
的更好替代方案是curl。您可以使用this SO post上的说明了解如何通过curl检索远程文本。
// First, retrieve the remote source using file_get_contents()
$str = file_get_contents('http://www.example.com/');
$my_field_val = 'my_field_value';
$fields_i_want = array('audien', 'unifor');
$field_vals = array();
$field_string = '';
// Use DOM to parse the values you want from the form
$dom = new DOMDocument;
$dom->loadHTML($str);
// Get all the input field nodes
$inputs = $dom->getElementsByTagName('input');
// Iterate over the input fields and save the values we want to an array
foreach ($inputs as $input) {
$name = $input->getAttribute('name');
if (in_array($name, $fields_i_want)) {
$val = $input->getAttribute('value');
$field_vals[$name] = $val;
}
}
// append the field value we set ourselves to the list
$field_vals['my_field'] = $my_field_val;
foreach ($field_vals as $key => $val) {
$field_vals[$key] = urlencode($val)
}
// url-ify the data for the POST
foreach($fields as $key=>$value) {
$fields_string .= $key.'='.$value.'&';
}
rtrim($fields_string, '&');
// open connection
$ch = curl_init();
// POST the data to the form submission url
$submit_url = 'http://www.submitform.com';
// set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $submit_url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
// execute post (returns TRUE on success or FALSE on failure)
$result = curl_exec($ch);
// close connection
curl_close($ch);
答案 2 :(得分:1)
不确定它是否合适,但为了检查解析HTML所需的字段,检查每个输入文件并查找所需的提及。
要解析HTML,您可以使用以下工具:
http://framework.zend.com/manual/en/zend.dom.query.html
http://simplehtmldom.sourceforge.net/
使用这些工具,您可以打开页面,在字段中查找所有必需的标签,然后决定使用表单字段进行提交。