通过使用 Symfony Panther,我发送了一个请求,我想得到响应。我能够获得正文和状态代码,但对于标题我只有一个空数组。
$client = Client::createChromeClient();
$client->request('GET', 'https://google.com');
$client->getInternalResponse()->getHeaders(); // returned empty array!!!
通过使用 Symfony Panther,我发送了一个请求,我想得到响应。我能够获得正文和状态代码,但对于标题我只有一个空数组。
$client = Client::createChromeClient();
$client->request('GET', 'https://google.com');
$client->getInternalResponse()->getHeaders(); // returned empty array!!!
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)的文档。
根据这个问题: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 和空标头数组。