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

如何阻止curl自动将请求头名称转为小写以规避网站拦截?

解决curl自动转换请求头名称为小写的问题

核心结论

curl从7.55.0版本开始默认将所有请求头名称转换为小写,目前没有官方配置选项可以强制保留请求头的大小写格式。这是因为HTTP/2规范要求请求头字段名小写,curl为了兼顾HTTP/2和HTTP/1.x的兼容性,统一采用了小写处理逻辑。

可行解决办法

1. 强制使用HTTP/1.0协议

HTTP/1.0对请求头大小写没有强制要求,curl在HTTP/1.0模式下会严格保留你指定的请求头大小写格式。执行命令时添加--http1.0参数即可:

curl --http1.0 -H 'User-Agent: YYY' -H 'Accept: */*' https://target-site.com

2. 修改curl源码重新编译

如果目标网站必须使用HTTP/1.1或更高版本,只能通过修改curl源码来禁用请求头小写转换:

  • 找到curl源码中处理请求头的模块(通常在src/http.c文件中)
  • 定位到将请求头字段名转换为小写的代码段(比如curl_http2_hdr_normalize或类似函数)
  • 注释或删除该转换逻辑后,重新编译curl

3. 改用其他工具模拟请求

如果不想修改或重新编译curl,可以用其他默认保留请求头大小写的工具,比如Python的requests库(仅HTTP/1.1模式下有效):

import requests

headers = {
    'User-Agent': 'YYY',
    'Accept': '*/*'
}
response = requests.get('https://target-site.com', headers=headers)
print(response.text)

补充说明

虽然HTTP标准规定请求头字段名是大小写不敏感的,但部分网站的WAF或指纹识别系统会严格校验请求头的大小写格式,这正是curl被拦截而wget可以正常访问的原因——wget默认不会转换请求头的大小写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:31:01