为什么 squid 拒绝来自 curl 的这个多部分表单数据 POST?

为什么 squid 拒绝来自 curl 的这个多部分表单数据 POST?

失败了:

$ curl --trace multipart-fail.log -F "source={}" http://127.0.0.1:3003/jslint

出现 squid 状态 417 错误,ERR_INVALID_REQ

我从来没有通过 Web 浏览器实际遇到过这种情况,所以可能是使用了 curl 而不是 squid,但如果我告诉 curl 不要使用 squid 代理,另一端的 Web 应用程序就会很好地接受它。

(如果有更合适的 StackExchange 网站,请告诉我。)

答案1

作为 HTTP/1.0 设备,Squid 不支持 Expect: 100-continue。请注意响应状态代码417 Expectation failed

卷曲应该自动重试请求,但不起作用;相反,您需要抑制 Expect 标头;例如,

curl -H "Expect:" --trace multipart-fail.log -F "source={}" http://127.0.0.1:3003/jslint

答案2

或者,你可以配置 Squid 来简单地忽略该请求标头...

在 squid.conf 中添加:ignore_expect_100 on

http://www.squid-cache.org/Doc/config/ignore_expect_100/

答案3

对于偶然发现此问题并在 PHP(不是命令行)中使用 cURL 遇到相同问题的人,请尝试添加以下行:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

它对我有用。

答案4

过了很长时间我才通过以下方式解决了这个问题。

//proxy server address
        $proxyServer="192.168.43.201";
//Proxy server port
        $proxyPort="3128";

     curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
     curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
     curl_setopt($ch, CURLOPT_PROXY, "$proxyServer:$proxyPort");

引用: http://djzone.im/2010/05/php-curl-ntlm-squid-proxy-authentication/

希望这对某人有帮助...

相关内容