【问题标题】:getHeader from getInternalResponse in Symfony Panther always return an empty arraySymfony Panther 中 getInternalResponse 的 getHeader 总是返回一个空数组
【发布时间】:2021-03-08 06:45:50
【问题描述】:

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

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

【问题讨论】:

  • 我也一样。我也试过$client->getResponse(),但这是不允许的。

标签: php symfony testing symfony-panther


【解决方案1】:

Panther 无权访问 HTTP 响应,如此 github 问题 https://github.com/symfony/panther/issues/17 中所述。

但是如果你仔细阅读,你会发现这不是 Panther 的限制,而是 Selenium WebDriver 的限制。看到这个帖子How to get HTTP Response Code using Selenium WebDriver

这意味着“我可以使用 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) 的文档。

【讨论】:

    【解决方案2】:

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

    恐怕标题也是如此。如果你看课 Symfony\Component\Panther\Client 和方法get($url) 可以看到:

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

    当 Response 的构造函数接受时:

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

    说了这么多,不管发生什么,你总是得到 HTTP 200 和空头数组。

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 2021-10-22
      相关资源
      最近更新 更多