我想用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
它让我跳了一下
代理不支持基本身份验证
所以你知道我做错了吗?
提前感谢。
答案 0 :(得分:18)
Cababunga的回答是正确的,但他们错过了另一种选择:--proxy-ntlm
。某些代理无法使用--proxy-anyauth
正确授权,因此理想情况下,您需要指定代理使用的身份验证方法。如果你运行curl -v -U user:pass -x proxy:port --url http://www.google.com
,你应该得到以下内容:
为您在Proxy-Authenticate参数中看到的任何内容添加标记,您应该很高兴。在此示例中,您将添加--proxy-ntlm
标志。
答案 1 :(得分:4)
您可以将用户名/密码放在经过身份验证的资源的URL中,以避免额外的命令行并发症。
http://username:password@twitter.com/statuses/update.xml
另外,-proxy快捷方式是小写的x,正如cababunga指出的那样。
curl -x proxyaddr:port -U proxyUser:proxyPass -u user:pass -d status="message" http://twitter.com/statuses/update.xml
答案 2 :(得分:2)
尝试添加--proxy-digest
或--proxy-anyauth
。
我认为要连接到代理,您应该使用小写-x
(不是-X
)。
答案 3 :(得分:0)
我设法在Micah的回答的帮助下完成了这个:
这是我最后访问BitBucket repo的命令:
curl -u userBitbucket:PwdBitBucket -U userProxy:pwdProxy -x address_proxy:port:proxy --proxy-ntlm http://host:port/projects/project/repos/repo/browse/file
答案 4 :(得分:0)
您可能想尝试使用SOCKS v5而不是v4:
$ curl --proxy socks5://proxyUser:proxyPass@proxy:port ...