-1

我想使用 CURL 和 php 发布一个 URL。

网页上有一个大表单,我不想手动复制所有变量并将其放入我的 POST 请求中。

我猜必须有一种方法可以自动序列化表单(使用 DOM 或其他东西),然后只需更改我需要的任何值。

我无法通过谷歌搜索我的出路,所以我想知道是否有人愿意提供帮助。

那么,有没有办法自动序列化一个隐藏在我刚刚从 URL 中提取的一堆 html 内容中的表单?

感谢您的帮助,安德鲁

4

4 回答 4

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

于 2009-02-11T18:59:50.980 回答
1

如果您询问如何将浏览器中的表单发送到服务器或如何将发布的表单放入 curl 请求中,我不清楚。从 php 开始,假设表单已经发布,它会很简单:

curl_setopt($handle, CURLOPT_POSTFIELDS, $_POST);

尽管没有以这种方式验证数据。

从 web 端看,不知道为什么要使用 DOM/Javascript 序列化表单,而不是仅仅通过普通帖子提交?

于 2009-02-06T20:16:00.247 回答
0

我不明白这个问题。听起来您想对表单进行屏幕抓取,填写,然后将其发布回您从中获取的页面。是对的吗?

编辑以回应评论:我建议使用 Simple HTML DOM 之类的工具来抓取 CURL 的 HTML(这就是我使用 PHP 抓取的工具)。您选择的库的文档将帮助您弄清楚如何识别表单字段。之后,您需要卷曲表单的操作页面,并将 CURL_POST_FIELDS 属性设置为您要传递给表单的值urlencode(),当然是 'd。

于 2009-02-06T20:24:00.247 回答
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>';
于 2009-02-06T20:34:18.523 回答