【问题标题】:how to get all the headers information in laravel 5.4如何在 laravel 5.4 中获取所有标题信息
【发布时间】:2021-08-19 01:10:14
【问题描述】:

当我像这样打印时:

echo '<pre>';
print_r(getallheaders());

它给出输出

[Host] => abc.com
    [User-Agent] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0
    [Accept] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    [Accept-Language] => en-US,en;q=0.5
    [Accept-Encoding] => gzip, deflate
    [Cookie] => someth
    [Upgrade-Insecure-Requests] => 1
    [Cache-Control] => max-age=0
    [SM_TRANSACTIONID] => 000000000000000000000000b7857360-1499-58b735e6-68944700-eed22930b94f
    [SM_SDOMAIN] => abc.com
    [SM_REALM] => REALM-BEACONTRACK-DEV-Protect root
    [SM_REALMOID] => 06-000cd148-15d2-18a7-a771-71810afc4027
    [SM_AUTHTYPE] => Form
    ....... many more 

 [Accept] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    [Referer] => http://127.0.0.1:8000
    [Accept-Encoding] => gzip, deflate, sdch, br
    [Accept-Language] => en-US,en;q=0.8
    [Cookie] => XSRF-TOKEN=eyJpdiI6Im1UZ012bXhRQ1VVdEUra1d3Yko4ZEE9PSIsInZhbHVlIjoidnFqN0l6VUVBVjdKd2hWUitHazhlTWN1Z2puSW1LMlZTTU4yYW1GcVwvQWg1aEpkNklZWUkranBIZ3R1UGoxUUdMU1VFWVEzekViWTluSkk1c0FjNlZ3PT0iLCJtYWMiOiIxNGFmMGE1OWQ3OWNlZWY1Y2E4OGQ4MzY1MDg3ZmM2MDY5NzVmYTI2YmE3MzA3YWU2M2U2YjkyOWEzZTMzYWFkIn0%3D; beaconTrack_session=eyJpdiI6ImVWazMyK2JLbXlrN0lxMEVEdE1pTlE9PSIsInZhbHVlIjoiSTdIbVkyWmROSDZBXC8xVmZJdHEycmgwOFpFUm1BNUtWVFNyQjF0MjY5TTV6Qkd1aUFGSEJBcmRrQ3hvM1BxVXdld0tjWlwvcVNEeXcwQmdjWW5yUFwvb1E9PSIsIm1hYyI6IjgzZjRiOGExODc2NmI3Y2JjNDY1MWViMThlZmE0ODlhYjMyYzllMTE1OTNhNjM1NWE1ZDc0NWViZDFkMjA3ZTIifQ%3D%3D
)

但是当我使用 laravel 函数打印时:

print_r($request-&gt;header());print_r($request-&gt;headers-&gt;all());

它永远不会在数组中打印出我需要的变量。它在输出下方打印出来

Array
(
    [host] => Array
        (
            [0] => abc.com
        )

    [connection] => Array
        (
            [0] => keep-alive
        )

    [cache-control] => Array
        (
            [0] => max-age=0
        )

    [upgrade-insecure-requests] => Array
        (
            [0] => 1
        )

    [user-agent] => Array
        (
            [0] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
        )

    [accept] => Array
        (
            [0] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
        )

    [accept-encoding] => Array
        (
            [0] => gzip, deflate, sdch
        )

    [accept-language] => Array
        (
            [0] => en-US,en;q=0.8
        )

    [cookie] => Array
        (
            [0] => cookie
        )

)

我如何打印 laravel 函数中的所有值,就像我可以使用 getallheaders() 一样?

【问题讨论】:

  • 你使用 laravel 不代表你不能使用getallheaders()
  • 仅适用于 apache
  • 是的,或者作为别名的函数,apache_request_headers ( )。最初,我认为 Laravel 隐藏了一些标题,但显然不是;我并排比较了这些列表,一切都得到了考虑。

标签: php laravel-5.4


【解决方案1】:

使用 Laravel collections transform() 方法而不是 array_map 替代 @Shedokan 的答案:

$headers = collect($request->header())->transform(function ($item) {
    return $item[0];
});

这样$headers 将成为一个集合,因此您可以使用toArray() 方法转换回数组。由于这是一个集合,它还可以访问任何其他集合方法。

【讨论】:

    【解决方案2】:

    Laravel 使用 Symphony,它将所有标头值保存在子数组中,因此我们只需映射数组并将它们取出:

    $get_first = function($x){
        return $x[0];
    };
    // Same as getallheaders(), just with lowercase keys
    print_r(array_map($get_first, $request->headers->all()));
    

    注意:所有键都是小写

    【讨论】:

      【解决方案3】:

      您可以使用以下代码:

      $header = app('request')->header('header_name', 'default_header_value');
      

      $request 不可用时。

      【讨论】:

      • 或者也只是request()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2012-07-02
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多