You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取完整HTTP请求头(非响应头)及代码修改方案

如何在代码中同时查看HTTP请求头和响应头

嘿,这个需求太常见啦!我来给你一步步拆解怎么实现,分两种最常用的开发场景给你具体示例:

场景1:用Python的requests库(最流行的HTTP客户端)

如果你的原代码是类似这样只打印响应头的:

import requests

url = "https://example.com"
response = requests.get(url)
print("响应头:")
for key, value in response.headers.items():
    print(f"{key}: {value}")

想要同时查看请求头,只需要获取response对象关联的request属性里的headers,修改后的代码如下:

import requests

url = "https://example.com"
response = requests.get(url)

# 新增:打印完整请求头
print("=== 请求头 ===")
for key, value in response.request.headers.items():
    print(f"{key}: {value}")

# 原有的响应头打印逻辑
print("\n=== 响应头 ===")
for key, value in response.headers.items():
    print(f"{key}: {value}")

关键说明

requests发送请求后,返回的Response对象里的request属性,包含了实际发送到服务器的所有请求细节,其中headers就是完整的请求头字典,直接遍历打印即可。


场景2:用Java的HttpURLConnection(原生库,无需依赖)

如果你的原代码是用原生HttpURLConnection只打印响应头:

import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://example.com");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.connect();
        
        // 原有的响应头打印
        System.out.println("响应头:");
        Map<String, java.util.List<String>> responseHeaders = connection.getHeaderFields();
        for (Map.Entry<String, java.util.List<String>> entry : responseHeaders.entrySet()) {
            System.out.println(entry.getKey() + ": " + String.join(", ", entry.getValue()));
        }
        
        connection.disconnect();
    }
}

要添加请求头查看,只需要调用connection.getRequestProperties()方法获取请求头,修改后的代码:

import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://example.com");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        
        // 发送请求前如果自定义了请求头,这里也能获取到
        // connection.setRequestProperty("User-Agent", "My-Custom-Agent");
        
        connection.connect();
        
        // 新增:打印完整请求头
        System.out.println("=== 请求头 ===");
        Map<String, java.util.List<String>> requestHeaders = connection.getRequestProperties();
        for (Map.Entry<String, java.util.List<String>> entry : requestHeaders.entrySet()) {
            System.out.println(entry.getKey() + ": " + String.join(", ", entry.getValue()));
        }
        
        // 原有的响应头打印逻辑
        System.out.println("\n=== 响应头 ===");
        Map<String, java.util.List<String>> responseHeaders = connection.getHeaderFields();
        for (Map.Entry<String, java.util.List<String>> entry : responseHeaders.entrySet()) {
            System.out.println(entry.getKey() + ": " + String.join(", ", entry.getValue()));
        }
        
        connection.disconnect();
    }
}

关键说明

HttpURLConnection的getRequestProperties()方法会返回所有设置的请求头(包括系统默认添加的和你自定义的),在请求发送前后调用都能获取到。


通用思路(适用于其他语言/库)

不管你用什么HTTP客户端工具,核心逻辑都是:

  • 找到请求对象的头信息存储位置:大多数成熟的客户端库都会保留发送的请求元数据,要么在请求对象本身,要么在返回的响应对象里关联了请求对象
  • 遍历并打印请求头的键值对即可

内容的提问来源于stack exchange,提问作者Ωmega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:36:41