QQ咨询 官方微信

添加微信好友

官方小程序

百度小程序

微信小程序

头条小程序

关于我们

PHP基础

PHP curl 获取当前请求 header 信息

 admin  2023-05-29 21:45:08
工作中经常需要对接第三方 api ,排查问题的时候需要提供请求详细参数信息。
有时候可能是认证头 Authorization 有误,如果不一并记录获取提供检查,可能会走很多弯路都不能发现问题所在。

正常 curl 获取响应结果
  1. $url = 'url/xx/server'
  2. $data = ['param' => 'test']; 
  3.  
  4. $ch = curl_init($url); 
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  6. curl_setopt($ch, CURLOPT_HTTPHEADER, array("content-type:application/json")); 
  7. curl_setopt($ch, CURLOPT_POST, true); 
  8. curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); 
  9.  
  10. $response = curl_exec($ch);  // 获取响应内容 
  11. curl_close($ch); 
这样只能获取得到 api 响应内容 body,如果出错了或者是返回非期望内容。需要联系提供方排查问题,我们可以用 php 的 curl_getinfo 函数获取更详细的信息。

curl_getinfo() 获取响应详情
  1. ... 
  2. $response = curl_exec($ch);  // 获取响应内容 
  3. $info = curl_getinfo($ch); 
  4. $error = curl_error($ch); 
  5.  
  6. curl_close($ch); 
利用 curl_getinfo() 获取响应详情,可以获得以下内容结构:
  1. $info = Array 
  2.     [url] => xxx.kangxuanpeng.com/xx/server 
  3.     [content_type] => application/json;charset=UTF-8 
  4.     [http_code] => 200 
  5.     [header_size] => 196 
  6.     [request_size] => 144 
  7.     [filetime] => -1 
  8.     [ssl_verify_result] => 0 
  9.     [redirect_count] => 0 
  10.     [total_time] => 0.266 
  11.     [namelookup_time] => 0.063 
  12.     [connect_time] => 0.188 
  13.     [pretransfer_time] => 0.188 
  14.     [size_upload] => 8 
  15.     [size_download] => 33 
  16.     [speed_download] => 124 
  17.     [speed_upload] => 30 
  18.     [download_content_length] => -1 
  19.     [upload_content_length] => 8 
  20.     [starttransfer_time] => 0.266 
  21.     [redirect_time] => 0 
  22.     [redirect_url] => 
  23.     [primary_ip] => 161.117.85.239 
  24.     [certinfo] => Array 
  25.         ( 
  26.         ) 
  27.  
  28.     [primary_port] => 80 
  29.     [local_ip] => 192.168.15.86 
  30.     [local_port] => 61451 
curl_error() 可以获取 http 错误信息

获取发送的请求 header 信息
需要在 curl_exec() 之前设置
  1. //至关重要,CURLINFO_HEADER_OUT选项可以拿到请求头信息 
  2. curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE); 
  3.  
  4. $response = curl_exec($ch); 
  5. $info = curl_getinfo($ch); 
  6. $error = curl_error($ch); 
  7.  
  8. curl_close($ch); 
这样执行后得到的 info 如下,其中 request_header 为请求的 header 信息:
  1. $info = Array 
  2.     [url] => url/xx/server 
  3.     [content_type] => application/json;charset=UTF-8 
  4.     [http_code] => 200 
  5.     [header_size] => 196 
  6.     [request_size] => 144 
  7.     [filetime] => -1 
  8.     [ssl_verify_result] => 0 
  9.     [redirect_count] => 0 
  10.     [total_time] => 0.218 
  11.     [namelookup_time] => 0 
  12.     [connect_time] => 0.125 
  13.     [pretransfer_time] => 0.125 
  14.     [size_upload] => 8 
  15.     [size_download] => 33 
  16.     [speed_download] => 151 
  17.     [speed_upload] => 36 
  18.     [download_content_length] => -1 
  19.     [upload_content_length] => 8 
  20.     [starttransfer_time] => 0.218 
  21.     [redirect_time] => 0 
  22.     [redirect_url] => 
  23.     [primary_ip] => 161.117.85.239 
  24.     [certinfo] => Array 
  25.         ( 
  26.         ) 
  27.  
  28.     [primary_port] => 80 
  29.     [local_ip] => 192.168.15.86 
  30.     [local_port] => 61756 
  31.     [request_header] => POST /xx/server HTTP/1.1 
  32. Host: xxx.kangxuanpeng.com 
  33. Accept: */* 
  34. content-type:application/json 
  35. Content-Length: 8 
  36.  

PS: 如果 api 是根据 http 状态来区分执行结果的话,可以选择不接收响应体,可以节省带宽以及时间。
  1. // 是否不需要响应的正文,为了节省带宽及时间,在只需要响应头的情况下可以不要正文 
  2. curl_setopt($oCurl, CURLOPT_NOBODY, true); 

¥ 打赏
×
如果您觉得文章帮助了您就打赏一下吧
非常感谢你的打赏,我们将继续分享更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

本文《PHP curl 获取当前请求 header 信息》发布于石头博客文章,作者:admin,如若转载,请注明出处:https://www.pweb123.com/html/php/949.html,否则禁止转载,谢谢配合!

文章点评

我来说两句 已有0条评论
点击图片更换

添加微信好友

添加微信好友

微信小程序

百度小程序