今天讲讲 cURL 怎么自定义HTTP请求头。这是一个比较常见也比较基础的问题。


这是我本地的环境:

❯ curl --version
curl 8.7.1 (x86_64-apple-darwin24.0) libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0
Release-Date: 2024-03-27

这是直接请求的情况:

curl https://httpbin.org/headers
{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "curl/8.7.1"
  }
}

可以看到,这里的 User-Agent 显示的就是 curl。


我们把 User-Agent 改一下。
cURL 提供了 -H 参数来做到这件事,用法很简单。


curl -H "User-Agent: qingting-proxy-bot/1.0" https://httpbin.org/headers
{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "qingting-proxy-bot/1.0"
  }
}

那如果你要添加的 header 有很多呢,用 -H 这个参数就有点又臭又长。
从 cURL 7.55.0 版本开始,官方给了个更优雅的方案,把所有头部写进一个文件里,用 @ 符号引用就行。


cat header_file
User-Agent: qingting-proxy-bot/1.0
My-Header2: 123

curl -H @header_file https://httpbin.org/headers
{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "My-Header2": "123",
    "User-Agent": "qingting-proxy-bot/1.0"
  }
}

最后,讲讲 cURL 对「空值头部」和「移除头部」的处理。


# 彻底移除 User-Agent(请求里不会再出现这个字段)
curl -H "User-Agent:" https://httpbin.org/headers
{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org"
  }
}

# 发送一个值为空的头部(字段存在,值为空)
curl -H "My-Custom-Header;" httpbin.org/headers
{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "My-Custom-Header": "",
    "User-Agent": "curl/8.7.1"
  }
}

光有 Header 的伪装就够了吗?不够的。我们还需要有足够的代理IP池,如果您有这方面的需求,可以关注蜻蜓代理。我们提供企业级、高质量的代理IP服务。


转载请注明