如何删除curl发送的默认标头

Jil*_*urp 29 curl

默认情况下,Curl会添加内容类型和用户代理等标头.通常这是一件好事,但我正在尝试测试当这些标头丢失时我们的服务器做了什么.我的问题是内容类型标题.如果丢失,服务器会正​​确地假定用户发送了json.但是,curl实际上添加了缺少的标题,并错误地假定我发布的内容是application/x-www-form-urlencoded.它还发送/的Accept标头.我想这是很好的默认行为,但我基本上希望它不发送我没有指定的标头.那有选择吗?

curl -v -X POST 'https://domain.com' -d '{...}'

> User-Agent: curl/7.37.1
> Host: domain.com
> Accept: */*
> Content-Length: 299
> Content-Type: application/x-www-form-urlencoded
Run Code Online (Sandbox Code Playgroud)

cml*_*ndz 38

-H标志与要删除的标题一起使用,并在之后没有内容:

-H, --header LINE   Custom header to pass to server (H)
Run Code Online (Sandbox Code Playgroud)

样品

-H 'User-Agent:'
Run Code Online (Sandbox Code Playgroud)

这将使得该请求而不User-Agent集管(而不是用一个空值发送它)

  • 要删除代理标头,请用--proxy-header替换-H,例如`--proxy-header“ Proxy-Connection:” (2认同)
  • `-H'User-Agent:'`会按预期方式删除标头(不发送标头,也不会发送任何值),但请谨慎使用-H'Content-Type:'`,它会发送带有空值的标头**。curl命令的不同行为很奇怪。 (2认同)
  • 与 @mikep 的经验相反,我发现(来自 libcurl,版本 7.63.0)将“Content-Type:”设置为标头确实从请求中完全删除了该标头,至少根据 Wireshark 捕获是这样。 (2认同)

ako*_*nov 7

好像curl发送3个标题.要在没有它们的情况下执行请求,您可以:

curl 172.20.11.100:8080/healthz -v -H 'User-Agent:' -H 'Accept:' -H 'Host:'
Run Code Online (Sandbox Code Playgroud)

+1到@cmlndz回答,他解释了如何删除单个标题.

您可以通过添加-v选项来检查实际发送的标头,如上所示.

  • `-H 'Host:'` 很可能会导致“HTTP 错误 400。请求主机名无效”。您还需要将“--http1.0”参数添加到curl命令中。 (5认同)
  • 如果您的请求有正文(如 POST 请求),它还会设置 `Content-Length: 433` 或任何正文的大小。您可以使用 `-H 'Content-Length:'` 来排除该标头(尽管这可能会导致无效请求,因为它应该包含长度或设置 Transfer-Encoding 标头) (3认同)