1

通过使用 Symfony Panther,我发送了一个请求,我想得到响应。我能够获得正文和状态代码,但对于标题我只有一个空数组。

$client = Client::createChromeClient();
$client->request('GET', 'https://google.com');
$client->getInternalResponse()->getHeaders(); // returned empty array!!!
4

2 回答 2

0

Panther 无权访问该 github 问题https://github.com/symfony/panther/issues/17中解释的 HTTP 响应。

但是如果你仔细阅读,你会发现这不是 Panther 的限制,而是 Selenium WebDriver 的限制。请参阅这篇文章如何使用 Selenium WebDriver 获取 HTTP 响应代码

这意味着“我可以使用 Symfony Panther 访问 HTTP 响应代码或 HTTP 标头吗?”这个问题的答案。是“不,这是不可能的”。

虽然这是不可能的,但我发现的解决方法是创建一个HttpClient并使用它来发出请求并从中获取响应。

<?php

use Symfony\Component\HttpClient\HttpClient;

$client = HttpClient::create();
$response = $client->request('GET', $this->myBaseUri);
$statusCode = $response->getStatusCode();
$headers = $response->getHeaders();

如果您想尝试这种方式,这里是HTTP Client (Symfony Docs)的文档。

于 2021-12-10T03:44:32.103 回答
0

根据这个问题:https://github.com/symfony/panther/issues/67,似乎没有管理状态代码(无论请求实际响应什么,HTTP 200 总是会返回。)

恐怕标题也是如此。如果您查看类 Symfony\Component\Panther\Client和方法get($url),您会看到:

$this->internalResponse = new Response($this->webDriver->getPageSource());

而 Response 的构造函数接受:

public function __construct(string $content = '', int $status = 200, array $headers = [])

话虽如此,无论发生什么,您总是会得到 HTTP 200 和空标头数组。

于 2021-08-18T17:41:10.590 回答