Home » Php » Laravel: Testing routes with custom request headers

Laravel: Testing routes with custom request headers

Posted by: admin November 30, 2017 Leave a comment

Questions:

So the question is simple:

How to send custom request header, when I testing with Laravel?

I’m trying to make like so:

$this->call('POST', '/my/route', ['params' => 'array'], [], ['X-Custom' => 'header']);

But when I call Request::header('X-Custom') in my controller, I didn’t get it.
Yes, it’s available in Request::server('X-Custom'), but it’s not what I need.

So I need to get it in Request::header().

PS: Laravel 4

Answers:

You need to properly form the header, or it will be ignored. Try this:

this->call('POST', '/my/route', ['params' => 'array'], [], ['HTTP_X-Custom' => 'header']);

The HTTP_ will be stripped when you look at your Request

Questions:
Answers:

In Laravel >= 5.1, the call method based on its definition:

call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null)

needs an extra array before headers array:

this->call('POST', '/my/route', ['params' => 'array'], [], [], ['HTTP_X-Custom' => 'header']);

Questions:
Answers:

TLDR; Prefix your custom headers with ‘HTTP_’

If anybody is interested in why this worked, read this issue:

https://github.com/laravel/framework/issues/1655