将 LWP::UserAgent 从 Perl 转换为 Ruby

Converting an LWP::UserAgent from Perl to Ruby

我正在尝试将 User-Agent 添加到我的 HTTP 请求中的 header(在 Ruby 中),但不确定 user-agent 字符串的格式.这是它在 Perl 中的定义:

use LWP::UserAgent;
my $ua = new LWP::UserAgent(keep_alive=>1);
$ua->credentials($netloc, '', "$user", "$pwd");

如果我尝试 print $ua;,我会得到一个每次都会更改的散列。我相信在 Ruby 中我应该将凭据嵌入到单个字符串中。我怎么知道如何格式化这个字符串?或者,如何在 Perl 中成功打印 $ua 的内容?

Ruby代码:

http = Net::HTTP.new("your.site.com", 80) req = Net::HTTP::Get.new("/path/to/the/page.html", {'User-Agent' => 'your_agent_here'}) response = http.request(req)

您的 Perl 示例没有显示您设置 User-Agent header(使用 agent 方法)。那是识别执行事务的软件的 header。您在 Perl 示例中添加了 Basic Auth 凭据,这是用户证明他们被允许访问资源的方式。它们是完全不同的东西。

当您 print $ua 时,您看到的是 object 的内存地址,例如 LWP::UserAgent=HASH(0x7fa9db00b1b0)

如果要在Ruby示例中设置User-Agent字符串,请填写您想要的字符串。

如果您想为基本授权提供用户名和密码,请参阅 Net::HTTP docs 中的示例:

uri = URI('http://example.com/index.html?key=value')

req = Net::HTTP::Get.new(uri)
req.basic_auth 'user', 'pass'

res = Net::HTTP.start(uri.hostname, uri.port) {|http|
  http.request(req)
}
puts res.body