Ruby 开放uri可以工作,但是net::http,为什么?

Ruby 开放uri可以工作,但是net::http,为什么?,ruby,Ruby,我正在进行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/

我正在进行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"]>
irb(main):053:0*r=OpenURI::open_uri(“https://192.168.8.123/api/1.0/appliance-management/components/component/status“,选项)
=>#“private”、“expires”=>“Thu,1970年1月1日00:00:00 GMT”、“set cookie”=>“JSESSIONID=B117FD42DA5509EBF99627C08332F249;Path=/;Secure;HttpOnly”、“内容类型”=>“application/json”、“传输编码”=>“chunked”、“日期”=>“2016年4月15日星期五14:16:08 GMT”、“服务器”=>“}、@metas=>”、@metas=>“缓存控制”=>[“private”、“expires”=>[“Thu,1970年1月1日00:00:00 GMT”],“设置cookie”=>[“JSSessionID=B117FD42DA5509EBF99627C08332F249;路径=/;安全;HttpOnly”],“内容类型”=>[“应用程序/json”],“传输编码”=>[“分块”],“日期”=>[“2016年4月15日星期五14:16:08 GMT”],“服务器”=>[”],@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'
irb(main):096:0*http=Net::http.new('192.168.8.123',443)
=> #
irb(main):097:0>http.use_ssl=true
=>正确
irb(main):099:0>http.verify\u mode=OpenSSL::SSL::verify\u NONE
=> 0
irb(main):102:0*req=Net::HTTP::Get.new(“/api/1.0/appliance management/components/component/status”,{})
=> #
irb(主):104:0*要求基本认证(“管理”、“默认”)
=>[“基本YWRtaW46ZGVmYXVsdA==”]
irb(主):106:0*http.request(请求)
Net::ReadTimeout:Net::ReadTimeout
from/opt/ruby/2.2.0/lib/ruby/2.2.0/net/protocol.rb:158:in“rbuf_fill中的救援”

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

我已经解决了这个问题。这是因为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)

您能确认192.168.8.123在端口443上是可访问的吗?
telnet 192.168.8.123 443
应以连接到192.168.8.123的
响应。转义字符为“^]”。
如果您可以看到SOA,则打开uri。