编程语言
首页 > 编程语言> > php-在Goutte中发送具有相同参数名称的发布请求

php-在Goutte中发送具有相同参数名称的发布请求

作者:互联网

我要抓取的一个网站的两个参数使用相同的名称,因此我想执行以下操作:

$params = array('dates' => '20140414', 'o' => '192382', 'o' => '213003' etc...);
$crawler = $client->request('POST', $url, $params);

但是,由于不可能在数组中拥有两个相同的键,所以我遇到了问题.在Goutte(Symfony的BrowserKit)中可以提出这样的请求吗?这是我要从Chrome的“网络”标签中发出的确切请求的打印屏幕.

解决方法:

为了使用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.

标签:goutte,symfony,httprequest,php
来源: https://codeday.me/bug/20191029/1961503.html