Curl 和 Net Http Ruby

Nic*_*ich 5 ruby

我可以使用curl 在命令行中轻松执行以下操作:

curl --digest -u "user:password" [url]
Run Code Online (Sandbox Code Playgroud)

但我正在尝试使用 Ruby 的 Net::HTTP。当我尝试使用 Net::HTTP 获取 API 时,有没有办法可以提供我的用户名和密码?

我尝试了 basic_auth 方法,但不起作用。

这是我的代码片段

基本认证

uri = URI("https://www.commcarehq.org/a/chanderi/api/v0.4/form/?xmlns=http://openrosa.org/formdesigner/C3B60561-F631-4D4C-8611-10E975EF8B44")

res = Net::HTTP.start(uri.hostname, uri.port) {|http|
  req = Net::HTTP::Get.new(uri)
  req.basic_auth 'myusername', 'mypassword'
  http.request(req)
}
puts res.body
Run Code Online (Sandbox Code Playgroud)

对于 net::http::digestauth

digest_auth = Net::HTTP::DigestAuth.new

uri = URI.parse 'http://localhost:8000/'
uri.user = CGI.escape('username@mail.com')
uri.password = 'password'
h = Net::HTTP.new uri.host, uri.port
req = Net::HTTP::Get.new uri.request_uri
res = h.request req
Run Code Online (Sandbox Code Playgroud)

Net::HTTPBadResponse:错误的状态行:“”

我正在关注http://docs.seattlerb.org/net-http-digest_auth/Net/HTTP/DigestAuth.html

Aru*_*hit 0

这是:Net::HTTP记录的。

创建新的 Net::HTTP 对象,而不打开 TCP 连接或 HTTP 会话。

地址应该是 DNS 主机名或 IP 地址,端口是服务器运行的端口。如果未指定端口,则使用 HTTP 或 HTTPS 的默认端口。

如果未给出任何 p_ 参数,则从 http_proxy 环境变量(或其大写等效变量)(如果存在)中获取代理主机和端口。如果代理需要身份验证,您必须手动提供。有关环境中代理检测的详细信息,请参阅 URI::Generic#find_proxy。要禁用代理检测,请将​​ p_addr 设置为 nil。

如果您要连接到自定义代理,则 p_addr 是代理主机的 DNS 名称或 IP 地址,p_port 是用于访问代理的端口,p_user 和 p_pass 是用户名和密码(如果需要授权才能使用代理)。