用curl发送<input name =“array [key]”/>?

时间:2014-03-14 08:34:54

标签: php curl web-crawler

我有一个抓取工具,我希望能够在目标网站上提交表单。

表单的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()。一切都失败了。我也试过改变呼叫的内容类型而没有任何成功。所有尝试都会导致目标网站无法识别要设置的帖子,然后将我重定向到其根目录/着陆页。

我做错了什么?

3 个答案:

答案 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'));