Как получить все заголовки, отправленные с помощью Http-фасада в Laravel?

#laravel #curl

#laravel #curl

Вопрос:

На основе этого https://laravel.com/docs/8.x/http-client вы можете генерировать запросы с помощью клиента CURL. Там отправляется опция assert specific с Http::assertSent указанием конкретного запроса, подобного этому

 Http::withToken('mytoken')->withHeaders([
    'X-First' => 'foo',
])->post('http://test.com/users', [
    'name' => 'Taylor',
    'role' => 'Developer',
]);
  

как получить исходное представление заголовков запросов, отправленных для его отладки?

Ответ №1:

В документах для клиента описывается способ, которым вы можете утверждать, что определенный заголовок присутствует, и вы также можете дополнительно утверждать значение; https://laravel.com/docs/8.x/http-client#inspecting-requests .

Похоже, вы хотите удалить все заголовки.

Если мы посмотрим в документации, когда вы утверждаете, что запрос был отправлен, вам передается экземпляр IlluminateHttpClientRequest . Если мы посмотрим IlluminateHttpClientRequest , есть открытый метод для получения всех заголовков:

 /**
 * Get the request headers.
 *
 * @return array
 */
public function headers()
{
    return collect($this->request->getHeaders())->mapWithKeys(function ($values, $header) {
        return [$header => $values];
    })->all();
}
  

Итак, в вашем тесте вы могли бы сделать что-то вроде этого:

 Http::fake();

//... your test

Http::assertSent(function ($request) {
    dump($request->headers());

    // replace this with an actual assertion but it’s needed to print the dump out
    return true;
});
  

Комментарии:

1. Привет, ты это тестировал? Я получаю ожидаемый запрос, который не был записан. Не удалось подтвердить, что false равно true.

2. Понял, вы должны вернуть true , чтобы напечатать результат, спасибо! Возможно, вы захотите обновить ответ, чтобы добавить это.

3. Я использовал этот метод для проверки материала раньше, да. Вы получаете эту ошибку, потому что вы на самом деле не возвращаете true или false из своего утверждения. Я не знаю, что вы хотите утверждать, поэтому я не могу написать ваше утверждение для вас.