我想用 oneliner 发一篇帖子(在本例中为 Twitter)。
如果我没有代理
curl -u user:pass -d status="message" http://twitter.com/statuses/update.xml
工作完美。
但是当我位于经过身份验证的代理后面时,情况并非如此。
我已经尝试过:
curl -X proxy:port -U proxyUser:proxyPass -u user:pass -d status="message" http://twitter.com/statuses/update.xml
它让我震惊
代理不支持基本身份验证
那么你知道我做错了什么吗?
提前致谢。
Cababunga 的答案是正确的,但他们缺少另一个选项:
--proxy-ntlm
。 有些代理无法使用 --proxy-anyauth
正确授权,因此理想情况下您需要指定代理使用的身份验证方法。 如果你运行 curl -v -U user:pass -x proxy:port --url http://www.google.com
,你应该得到如下内容:
为您在代理验证参数中看到的任何内容添加一个标志,您应该可以开始了。 在此示例中,您将添加
--proxy-ntlm
标志。
您可以将用户名/密码放入经过身份验证的资源的 URL 中,以避免出现额外的命令行复杂性。
http://username:[email protected]/statuses/update.xml
此外,正如 cababunga 指出的那样,--proxy 快捷方式是小写的 x。
curl -x proxyaddr:port -U proxyUser:proxyPass -u user:pass -d status="message" http://twitter.com/statuses/update.xml
尝试添加
--proxy-digest
或 --proxy-anyauth
。
我认为要连接到代理,您应该使用小写字母 -x
(而不是 -X
)。
我在弥迦的答案的帮助下成功地做到了这一点:
这是我最后访问 BitBucket 存储库的命令:
curl -u userBitbucket:PwdBitBucket -U userProxy:pwdProxy -x address_proxy:port:proxy --proxy-ntlm http://host:port/projects/project/repos/repo/browse/file
您可能想尝试使用 SOCKS v5 而不是 v4:
$ curl --proxy socks5://proxyUser:proxyPass@proxy:port ...
我也遇到了这个问题,仅仅使用 --proxy-ntlm 并不能解决,因为我在一家拥有多个网络域的公司工作,然后通过在我的代理的用户名:密码上添加域,效果很好:
curl -v --proxy-ntlm -U domain/username:password --proxy http://proxy:port https://www.google.com
或者如果使用通用环境变量:
export proxy=http://domain%2Fusername:password@proxy:port
export http_proxy=%proxy%
export HTTP_PROXY=%proxy%
export https_proxy=%proxy%
export HTTPS_PROXY=%proxy%
export no_proxy=127.0.0.1,localhost,172.17.0.0,172.27.0.0
如果使用 Windows,请将导出替换为 set
curl --proxy-ntlm https://www.google.com