我有一个抓取工具,我希望能够在目标网站上提交表单。
表单的HTML是:
<form method="post" action="http://www.hemnet.se/sok/create">
<input name="search[keywords]" type="hidden" value="Uppsala">
<button class="button primary" type="submit"><span>Search</span></button>
</form>
所以我发现目标网站需要设置search[keywords]
。它可能是&#34;&#34;什么都行。但需要将其设置为显示搜索结果。
我的卷曲是:
$url = 'http://www.hemnet.se/sok/create';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'search[keywords]=Uppsala' );
$content = curl_exec($ch);
curl_close($ch);
我尝试了POSTFIELDS
的许多不同组合。例如:
$fields = array('search' => array('keywords' => 'Uppsala'));
$fieldset = http_build_query($fields);
有或没有http_build_query()
。一切都失败了。我也试过改变呼叫的内容类型而没有任何成功。所有尝试都会导致目标网站无法识别要设置的帖子,然后将我重定向到其根目录/着陆页。
我做错了什么?
答案 0 :(得分:0)
使用:
curl_setopt($ch, CURLOPT_POSTFIELDS, array('search[keywords]' => 'Uppsala');
答案 1 :(得分:0)
我认为这应该可以胜任:
$fields = array('search[keywords]' => 'Uppsala');
$fieldset = http_build_query($fields);
答案 2 :(得分:0)
在您的示例中,您没有进行multipart
表单发布,哪个错误。所以只需删除它,它就会对你有用:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));