如何删除cURL发送的默认标头?

如何删除cURL发送的默认标头?,curl,http-headers,content-type,x-www-form-urlencoded,Curl,Http Headers,Content Type,X Www Form Urlencoded,默认情况下,Curl会添加标题,例如内容类型和用户代理。通常这是一件好事,但我正在尝试测试我们的服务器在缺少这些头时会做什么 我的问题是内容类型标题。如果缺少,服务器将正确地假定用户发送了JSON。但是,curl实际上添加了缺少的标题,并错误地认为我发布的内容application/x-www-form-urlencoded。它还发送一个接受头/ 我想这是一个很好的默认行为,但我基本上不希望它发送我没有指定的头。有这样的选择吗 curl -v -X POST 'https://example.c

默认情况下,Curl会添加标题,例如
内容类型
用户代理
。通常这是一件好事,但我正在尝试测试我们的服务器在缺少这些头时会做什么

我的问题是
内容类型
标题。如果缺少,服务器将正确地假定用户发送了JSON。但是,curl实际上添加了缺少的标题,并错误地认为我发布的内容
application/x-www-form-urlencoded
。它还发送一个接受头/

我想这是一个很好的默认行为,但我基本上不希望它发送我没有指定的头。有这样的选择吗

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

> User-Agent: curl/7.37.1
> Host: domain.com
> Accept: */*
> Content-Length: 299
> Content-Type: application/x-www-form-urlencoded

对要删除的标题使用
-H
标志,并且在

-H, --header LINE   Custom header to pass to server (H)
样品

-H 'User-Agent:'

这将使请求不带
用户代理
头(而不是用空值发送)

看起来像
curl
发送3个头。要执行不带参数的请求,可以附加参数:

-H 'User-Agent:' -H 'Accept:' -H 'Host:'
+1至@cmlndz回答,他解释如何移除单个标题


您可以通过添加
-v

来检查实际发送的头。要删除代理头,请将-H替换为--proxy header,例如
--proxy header“proxy Connection:”
使用标准Windows shell(
cmd.exe
)我必须将单引号替换为双引号(或将它们全部删除).
-H“用户代理:”
按预期删除标题(不发送标题和值),但请注意
-H“内容类型:”
,它将发送带有空值的标题。curl命令的不同行为很奇怪。与@mikep的经验相反,我发现(从libcurl,版本7.63.0)设置“Content Type:”作为头确实从请求中完全删除了该头,至少根据Wireshark捕获。我有
curl 7.66.0(x86_64-pc-cygwin)libcurl/7.66.0
如果我将
-H'内容类型:'
作为参数传递,它不会发送
内容类型
标题。如果您的请求有正文(如POST请求),它还将设置
内容长度:433
或正文的大小。您可以使用
-H“Content Length:”
排除该标头(尽管这可能会导致无效请求,因为它应该包括长度或设置传输编码标头)
-H“Host:”
很可能会导致“HTTP错误400。请求主机名无效”您还需要将
--http1.0
参数添加到curl命令中。