通过经过身份验证的代理和经过身份验证的http资源进行curl

问题描述 投票:0回答:6

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

它让我震惊

代理不支持基本身份验证

那么你知道我做错了什么吗?

提前致谢。

rest curl
6个回答
20
投票

Cababunga 的答案是正确的,但他们缺少另一个选项:

--proxy-ntlm
。 有些代理无法使用
--proxy-anyauth
正确授权,因此理想情况下您需要指定代理使用的身份验证方法。 如果你运行
curl -v -U user:pass -x proxy:port --url http://www.google.com
,你应该得到如下内容:

  • 关于 connect() 到代理 [您的代理] 端口 [您的端口] (#0)
  • 尝试 [IP]...
  • 已连接
  • 已连接到 [您的代理] ([IP]) 端口 [您的端口] (#0)
  • 建立到 www.google.com:443 的 HTTP 代理隧道
  • 使用 Basic 与用户“[user]”进行代理身份验证
  • 连接www.google.com:443 HTTP/1.1
  • 主机:www.google.com:443
  • 代理授权:基本[乱码]
  • 用户代理:curl/[ver] ([OS]) libcurl/[ver] OpenSSL/[ver] zlib/[ver]
  • 代理连接:保持活动状态
  • HTTP/1.1 407 需要代理身份验证
  • 代理验证:协商
  • 代理验证:NTLM

为您在代理验证参数中看到的任何内容添加一个标志,您应该可以开始了。 在此示例中,您将添加

--proxy-ntlm
标志。


6
投票

您可以将用户名/密码放入经过身份验证的资源的 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

3
投票

尝试添加

--proxy-digest
--proxy-anyauth
。 我认为要连接到代理,您应该使用小写字母
-x
(而不是
-X
)。


1
投票

我在弥迦的答案的帮助下成功地做到了这一点:

这是我最后访问 BitBucket 存储库的命令:

curl  -u userBitbucket:PwdBitBucket -U userProxy:pwdProxy -x address_proxy:port:proxy --proxy-ntlm http://host:port/projects/project/repos/repo/browse/file

1
投票

您可能想尝试使用 SOCKS v5 而不是 v4:

$ curl --proxy socks5://proxyUser:proxyPass@proxy:port ...

0
投票

我也遇到了这个问题,仅仅使用 --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

© www.soinside.com 2019 - 2024. All rights reserved.