【问题标题】:open-uri works but net::http, why?open-uri 可以工作,但是 net::http,为什么?
【发布时间】:2016-04-15 14:47:39
【问题描述】:

我正在进行 HTTPS 调用,调试如下。 open_uri 工作正常:

irb(main):053:0* r=OpenURI::open_uri("https://192.168.8.123/api/1.0/appliance-management/components/component/status", opts)
=> #<StringIO:0x007fc6e4a8ee38 @base_uri=#<URI::HTTPS https://192.168.8.123/api/1.0/appliance-management/components/component/status>, @meta={"cache-control"=>"private", "expires"=>"Thu, 01 Jan 1970 00:00:00 GMT", "set-cookie"=>"JSESSIONID=B117FD42DA5509EBF99627C08332F249; Path=/; Secure; HttpOnly", "content-type"=>"application/json", "transfer-encoding"=>"chunked", "date"=>"Fri, 15 Apr 2016 14:16:08 GMT", "server"=>""}, @metas={"cache-control"=>["private"], "expires"=>["Thu, 01 Jan 1970 00:00:00 GMT"], "set-cookie"=>["JSESSIONID=B117FD42DA5509EBF99627C08332F249; Path=/; Secure; HttpOnly"], "content-type"=>["application/json"], "transfer-encoding"=>["chunked"], "date"=>["Fri, 15 Apr 2016 14:16:08 GMT"], "server"=>[""]}, @status=["200", "OK"]>

但是 Net::HTTP 总是出现 ReadTimeout 错误:

irb(main):096:0* http = Net::HTTP.new('192.168.8.123', 443)
=> #<Net::HTTP 192.168.8.123:443 open=false>
irb(main):097:0> http.use_ssl = true
=> true
irb(main):099:0> http.verify_mode=OpenSSL::SSL::VERIFY_NONE
=> 0
irb(main):102:0* req = Net::HTTP::Get.new("/api/1.0/appliance-management/components/component/status", {})
=> #<Net::HTTP::Get GET>
irb(main):104:0* req.basic_auth('admin', 'default')
=> ["Basic YWRtaW46ZGVmYXVsdA=="]
irb(main):106:0* http.request(req)
Net::ReadTimeout: Net::ReadTimeout
        from /opt/ruby/2.2.0/lib/ruby/2.2.0/net/protocol.rb:158:in `rescue in rbuf_fill'

我的 Net::HTTP 代码有什么问题?

【问题讨论】:

  • 你能确认 192.168.8.123 在端口 443 上可达吗? telnet 192.168.8.123 443 应该回复 Connected to 192.168.8.123. Escape character is '^]'. 如果是这样
  • 如您所见,open_uri 有效。

标签: ruby


【解决方案1】:

我已经找到了问题所在。这是因为 Ruby 2.2 发生了变化。在 Ruby 1.9.1 中,Net::HTTP 默认不使用代理,但在 Ruby 2.2 中,Net::HTTP 默认从 ENV 获取代理。因此,在 Ruby 2.2 中,当我们初始化一个 Net::HTTP 对象时,我们必须显式强制不使用代理:

http = Net::HTTP.new(ip, port, nil)

【讨论】:

    猜你喜欢
    • 2015-07-24
    • 1970-01-01
    • 2021-05-03
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    相关资源
    最近更新 更多