我正在抓取的一个网站对两个参数使用相同的名称,所以我想做这样的事情:
$params = array('dates' => '20140414', 'o' => '192382', 'o' => '213003' etc...);
$crawler = $client->request('POST', $url, $params);
然而,由于阵列中不可能有两个相同的键,我遇到了问题。可以在Goutte(Symfony的BrowserKit)中提出这样的请求吗?这是一个打印屏幕,显示我想从Chrome的网络标签中提出的确切要求。
答案 0 :(得分:4)
为了使用Goutte(或Guzzle,它有相同的问题)执行此操作,您必须构建自己的表单POST请求,而不是使用$formParameters
。这需要手动设置Content-Type并将参数作为请求体发送。
我们假设您要发送以下参数:
['foo' => 1, 'bar' => 2, 'bar'=> 3, 'baz' => 4]
这是您的代码看起来像
$queryParams = [
'foo=1',
'bar=2',
'bar=3',
'baz=4',
];
$content = implode('&', $queryParams);
//This produces foo=1&bar=2&bar=3&baz=4
/** @var Goutte\Client $client */
$crawler = $client->request('POST', 'http://example.com/post.php', [], [], ['HTTP_CONTENT_TYPE' => 'application/x-www-form-urlencoded'], $content);
请注意,参数和值必须是urlencoded。