从 PHP cURL 响应中获取标头

新手上路,请多包涵

我是 PHP 新手。在发送 php curl POST 请求后,我试图从响应中获取 Header。客户端将请求发送到服务器,服务器将带有 Header 的响应发回。这是我发送 POST 请求的方式。

    $client = curl_init($url);
   curl_setopt($client, CURLOPT_CUSTOMREQUEST, "POST");
   curl_setopt($client, CURLOPT_POSTFIELDS, $data_string);
   curl_setopt($client, CURLOPT_HEADER, 1);
   $response = curl_exec($client);
   var_dump($response);

这是我从浏览器获得的来自服务器的标头响应

HTTP/1.1 200 OK
Date: Wed, 01 Feb 2017 11:40:59 GMT
Authorization: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2Vycy9CYW9CaW5oMTEwMiIsIm5hbWUiOiJhZG1pbiIsInBhc3N3b3JkIjoiMTIzNCJ9.kIGghbKQtMowjUZ6g62KirdfDUA_HtmW-wjqc3ROXjc Content-Type: text/html;charset=utf-8 Transfer-Encoding: chunked Server: Jetty(9.3.6.v20151106)

如何从 Header 中提取 Authorization 部分?我需要将其存储在 cookie 中

原文由 Tuan Dinh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 789
2 个回答

它将所有标题转换为数组

// create curl resource
$ch = curl_init();

// set url
curl_setopt($ch, CURLOPT_URL, "example.com");

//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//enable headers
curl_setopt($ch, CURLOPT_HEADER, 1);
//get only headers
curl_setopt($ch, CURLOPT_NOBODY, 1);
// $output contains the output string
$output = curl_exec($ch);

// close curl resource to free up system resources
curl_close($ch);

$headers = [];
$output = rtrim($output);
$data = explode("\n",$output);
$headers['status'] = $data[0];
array_shift($data);

foreach($data as $part){

    //some headers will contain ":" character (Location for example), and the part after ":" will be lost, Thanks to @Emanuele
    $middle = explode(":",$part,2);

    //Supress warning message if $middle[1] does not exist, Thanks to @crayons
    if ( !isset($middle[1]) ) { $middle[1] = null; }

    $headers[trim($middle[0])] = trim($middle[1]);
}

// Print all headers as array
echo "<pre>";
print_r($headers);
echo "</pre>";

原文由 Thamaraiselvam 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于第一个答案,请注意代码:

 $middle=explode(":",$part);

包含 : 的字符串数据会产生错误的结果,例如:

 Sat, 14 Jan 2017 01:10:01 GMT

拆分字段以构建数组的正确代码如下:

 $middle=explode(":",$part,2);

原文由 myHealthbox Admin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题