命令行curl POST提供零内容长度

命令行curl POST提供零内容长度,post,proxy,curl,Post,Proxy,Curl,我使用命令行curl通过代理完成一篇文章,但是我的表单数据的内容长度消失为零。知道我做错了什么吗 这是我的命令行(使用公共测试表单,以便其他人可以尝试): curl-v--代理ntlm--代理代理服务器:代理端口--代理用户:-d“fname=a&lname=b”http://www.snee.com/xml/crud/posttest.cgi -v=冗长 接下来的几个参数让我们使用windows身份验证通过代理 -d=应该使用给定的参数进行post 然而,响应和详细的打印都表明表单内容正在消失

我使用命令行curl通过代理完成一篇文章,但是我的表单数据的内容长度消失为零。知道我做错了什么吗

这是我的命令行(使用公共测试表单,以便其他人可以尝试):

curl-v--代理ntlm--代理代理服务器:代理端口--代理用户:-d“fname=a&lname=b”http://www.snee.com/xml/crud/posttest.cgi

-v=冗长
接下来的几个参数让我们使用windows身份验证通过代理
-d=应该使用给定的参数进行post

然而,响应和详细的打印都表明表单内容正在消失。curl打印“Content Length:0”,返回的html同时缺少参数和内容长度为0

该漏洞似乎不在代理服务器中,因为curl承认它发送的内容长度为0。有人知道这个问题的解决办法吗?还有人看到了吗

更新:似乎有相同的错误,但没有建议解决方案,除了不使用ntlm之外,我不得不这样做

更新2:这肯定只发生在NTLM身份验证中,我已经尝试了一种替代身份验证方法。同样,使用-F代替-d(对于二进制形式的数据)也会以同样的方式失败


更新3(变通方法):我在curl用户列表中讨论了这一点。提供了一种变通方法,即使用--proxy anyauth而不是--proxy ntlm。我仍在调查这个问题,但这个解决方法对我来说很有效。

NTLM是一个挑战响应协议。当您指示要使用NTLM时,客户机将首先发送一个不带正文的请求(以避免浪费发送正文的带宽而使其被服务器的HTTP/401质询拒绝)。只有在完成质询/响应协议后,才会实际张贴尸体


当客户端需要NTLM,但代理或服务器不知道时,这会导致许多问题(因此会对0字节的POST进行操作,从不挑战客户端)。

我在使用HTTP摘要发出请求时遇到此问题。Eric是正确的,curl试图变得聪明,不发布任何数据,因为它知道在收到服务器的质询后必须再次发出请求

事实证明,如果您提供
--anyauth
选项(要求curl自动检测身份验证方法),初始请求将包括所有POST数据,并且(在我的情况下)服务器按预期响应