失败了:
$ curl --trace multipart-fail.log -F "source={}" http://127.0.0.1:3003/jslint
出现 squid 状态 417 错误,ERR_INVALID_REQ
。
- 失败的 curl 请求的踪迹
- 成功的 curl 请求的踪迹使用 urlencoding (curl -d) 而不是 multipart (curl -F)
- squid 错误信息的格式化版本
我从来没有通过 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
答案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/
希望这对某人有帮助...