为什么squid从curl拒绝这个multipart-form-data POST?

这失败了:

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

有一个squid状态417错误, ERR_INVALID_REQ

  • 追踪失败的curl请求
  • 跟踪使用urlencoding(curl -d)而不是multipart(curl -F) 的成功curl请求
  • 格式化的squid错误信息

我从来没有在实践中通过networking浏览器,所以它可能是curl使用,而不是鱿鱼,但如果我告诉curl不要使用鱿鱼代理,另一端的Web应用程序接受它就好了。

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

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

Curl 应该自动重试请求,但不会; 相反,你需要压制Expect头文件; 例如,

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

或者,你可以configurationSquid来简单地忽略该请求头…

在squid.conf中添加:ignore_expect_100

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

对于任何人遇到这个问题,并在PHP(不是命令行)cURL获得相同的问题,请尝试添加此行:

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

它为我工作。

经过很长一段时间,我以下面的方式解决了这个问题。

 //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/

希望这可以帮助别人…