卷曲通过身份验证的代理和经过身份验证的http资源

时间:2010-11-06 00:08:45

标签: rest curl

我想用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

它让我跳了一下

  

代理不支持基本身份验证

所以你知道我做错了吗?

提前感谢。

5 个答案:

答案 0 :(得分:18)

Cababunga的回答是正确的,但他们错过了另一种选择:--proxy-ntlm。某些代理无法使用--proxy-anyauth正确授权,因此理想情况下,您需要指定代理使用的身份验证方法。如果你运行curl -v -U user:pass -x proxy:port --url http://www.google.com,你应该得到以下内容:

  • 关于连接()到代理[您的代理]端口[您的端口](#0)
  • 尝试[IP] ...
  • 连接
  • 连接到[您的代理]([IP])端口[您的端口](#0)
  • 建立到www.google.com:443
  • 的HTTP代理隧道
  • 使用Basic与用户'[user]'
  • 进行代理身份验证
  • CONNECT www.google.com:443 HTTP / 1.1
  • 主持人:www.google.com:443
  • 代理授权:基本[gibberish]
  • User-Agent:curl / [ver]([OS])libcurl / [ver] OpenSSL / [ver] zlib / [ver]
  • 代理连接:Keep-Alive
  • HTTP / 1.1 407需要代理身份验证
  • 代理 - 身份验证:NEGOTIATE
  • 代理验证:NTLM

为您在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 ...