强制cURL发送一个无效的HTTP头

9
如何强制cURL发送一个无效的HTTP头,如下所示:
curl -k 'https://192.168.1.1/' -H 'Host: 192.168.1.1' -H 'blah' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.8'

当我尝试上述操作时,cURL会很贴心地省略掉无效的标头。

我怀疑这是不可能的。但对于特定的请求,您不需要完整的协议包装器,您可以通过php从套接字发送原始http请求。 - arkascha
2个回答

20
你可以,但比那更加复杂。curl会检查你是否使用冒号并避免传递没有冒号的标头。但是,你可以通过传递一个带有嵌入式CRLF的标头来欺骗curl的冒号检查,然后创建两个标头行之一可以没有冒号。
例如像这样:
curl -H "`printf "Foo: bar\r\nblah"`" -v localhost

(-v选项当然可以让你看到curl实际发送的请求)


6
一个真正的黑客...你恢复了我对互联网的信心。 - J. Doe
1
或者在curl中注释掉检查并重新编译。 - Nicholas Shanks
这正是我需要的来测试对无效的 Content-Length 标头的处理;当指定 -H'Content-Length: ...' 时,curl 会阻塞直到标准输入提供足够的输入,这是唯一的方法来强制 cURL 尊重它。编辑:刚意识到回答者是谁。(: 让我更加喜欢它。 - Qix - MONICA WAS MISTREATED

0
你可以在头部中直接提供换行符(\n)字符 - 这将导致服务器响应400 Bad Request
你的头部格式应该类似于这样:-H "Host: myserver\n unknown"
一个示例调用如下: curl -v -H "Host: myweb\nunknown" http://localhost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接