我想使用CURL和php发布一个URL。
网页上有一个很大的表单,我不想手动复制所有变量并将其放入我的POST请求中。
我猜测必须有一种方法可以自动序列化表单(使用DOM或其他东西),然后只需更改我需要的任何值。
我无法通过谷歌来解决这个问题,所以我想知道是否有人能够提供帮助。
那么,无论如何,是否有自动序列化一个表单,该表单隐藏在我刚从URL中提取的一堆html内容中?
感谢您的帮助, 安德鲁
答案 0 :(得分:2)
$http = new HttpQueryString();
$http->set($_POST);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$http->get());
需要PECL pecl_http> = 0.22.0
答案 1 :(得分:1)
如果您询问如何将浏览器中的表单提供给服务器或如何将已发布的表单放入curl请求中,则不清楚。 从php开始,假设表单已发布,它将如下所示:
curl_setopt($ handle,CURLOPT_POSTFIELDS,$ _POST);
虽然没有数据以这种方式验证。
从网络方面来说,不确定为什么要使用DOM / Javascript序列化表单,而不是仅通过普通帖子提交表单?
答案 2 :(得分:0)
我不明白这个问题。听起来你想要屏幕抓取一个表单,填写它,然后将其POST回到你从中获取它的页面。是吗?
编辑以回应评论:
我建议使用像Simple HTML DOM这样的工具来抓取CURL的HTML(这就是我用PHP进行抓取的工具)。您选择的库的文档将帮助您弄清楚如何识别表单字段。之后,您需要卷曲表单的操作页面,并将CURL_POST_FIELDS属性设置为您希望传递给表单的值,urlencode()
当然。
答案 3 :(得分:0)
不确定问题究竟是什么,但你要么想做这样的事情:
$fields_string = http_build_query($data_to_send);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string);
或者你需要研究一下:
$html = file_get_html('http://www.thesite.com/thepage.html');
foreach($html->find('input') as $element)
echo $element->name . '<br>';