如何使用PHP获取HTTP请求返回的响应头和Cookie数据
以下是不同技术栈下的直接可用实现方案:
Python(requests/urllib 场景)
无需额外依赖配置,直接通过响应对象的内置属性提取即可:
- 提取响应头:访问响应对象的
headers属性,返回类字典结构可直接按键取值 - 提取Cookie:访问响应对象的
cookies属性,可直接转为字典格式使用
requests库示例代码:
import requests resp = requests.get("https://你的API地址") # 提取全部响应头 print(resp.headers) # 提取单个响应头,示例取Content-Type print(resp.headers.get("Content-Type")) # 提取全部Cookie并转为字典 cookie_dict = dict(resp.cookies) print(cookie_dict) # 提取单个Cookie,示例取session_id print(resp.cookies.get("session_id"))
urllib库示例代码:
import urllib.request req = urllib.request.Request("https://你的API地址") with urllib.request.urlopen(req) as resp: # 提取全部响应头 print(resp.headers) # 提取所有Set-Cookie字段 print(resp.headers.get_all("Set-Cookie"))
前端JavaScript场景
Fetch API 实现
- 前端默认无法通过JS读取跨域请求的响应Cookie和自定义头,同域下可正常读取,跨域场景需要后端配置
Access-Control-Expose-Headers暴露对应字段才可读取 - 跨域请求需要携带Cookie的话,必须添加
credentials: "include"配置
示例代码:
fetch("https://你的API地址", { credentials: "include" }).then(resp => { // 遍历所有响应头 resp.headers.forEach((value, key) => { console.log(`${key}: ${value}`) }) // 提取单个响应头 console.log(resp.headers.get("Content-Type")) // 同域下读取当前页面Cookie console.log(document.cookie) })
Axios 实现
浏览器环境下的Cookie读取规则和Fetch一致,Node.js环境可直接从响应头提取set-cookie字段:
import axios from 'axios' axios.get("https://你的API地址", { withCredentials: true // 跨域携带Cookie的必填配置 }).then(resp => { // 提取全部响应头 console.log(resp.headers) // Node.js环境下提取所有Cookie console.log(resp.headers['set-cookie']) })
Java(OkHttp3 场景)
示例代码:
import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class HttpDemo { public static void main(String[] args) throws Exception { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://你的API地址") .build(); try (Response response = client.newCall(request).execute()) { // 提取全部响应头 System.out.println(response.headers()); // 提取单个响应头 System.out.println(response.header("Content-Type")); // 提取所有Cookie System.out.println(response.headers("Set-Cookie")); } } }
通用注意事项
- 跨域场景下要读取非默认暴露的响应头(包括
Set-Cookie、自定义业务头),必须由后端在响应头中添加Access-Control-Expose-Headers配置,把需要读取的字段加入白名单,否则前端JS无法读取 - 如果Cookie设置了
HttpOnly属性,前端JS无法通过document.cookie读取该Cookie,仅会由浏览器自动在后续请求中携带
内容的提问来源于stack exchange,提问作者BrokenHeart
相关产品推荐
相关产品推荐

