Ruby请求https – “in`read_nonblock’:连接由peer重置(Errno :: ECONNRESET)”
这是我的代码
domain = 'http://www.google.com' url = URI.parse "https://graph.facebook.com/fql?q=SELECT%20url,normalized_url%20FROM%20link_stat%20WHERE%20url='#{domain}'" req = Net::HTTP::Get.new url.path res = Net::HTTP.start(url.host, url.port) {|http| http.request req} puts res.body
它给了我
/home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:153:in `read_nonblock': Connection reset by peer (Errno::ECONNRESET) from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:153:in `rbuf_fill' from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:134:in `readuntil' from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:144:in `readline' from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:39:in `read_status_line' from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:28:in `read_new' from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1405:in `block in transport_request' from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1402:in `catch' from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1402:in `transport_request' from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1375:in `request' from /home/alex/Documents/ruby_test1.rb:20:in `block in ' from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:851:in `start' from /home/alex/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:582:in `start' from /home/alex/Documents/ruby_test1.rb:20:in `'
我做错了什么?
您的代码中有几个奇怪的地方。 主要是:因为您使用SSL
您需要HTTP.start
:use_ssl => url.scheme == 'https'
。 HTTP.Get
构造函数等待URI
,而不是路径。 总结:
domain = 'http://www.google.com' url = URI.parse("https://graph.facebook.com/fql?q=SELECT%20url,normalized_url%20FROM%20link_stat%20WHERE%20url='#{domain}'") req = Net::HTTP::Get.new url res = Net::HTTP.start(url.host, url.port, :use_ssl => url.scheme == 'https') {|http| http.request req} puts res
得到:
#
接受的答案给了我一个错误 –
`initialize': no implicit conversion of Hash into String (TypeError)
当我使用时 –
Net::HTTP.start(url.host, url.port, :use_ssl => url.scheme == 'https')
我的Ruby版本是 –
arup_ruby$ ruby -v ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin12.0]
然后,我修改了如下代码: –
require "uri" require "net/http" domain = 'http://www.google.com' uri = URI.parse("https://graph.facebook.com/fql?q=SELECT%20url,normalized_url%20FROM%20link_stat%20WHERE%20url='#{domain}'") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.scheme == 'https' req = Net::HTTP::Get.new uri res = http.start { |http| http.request req } puts res # >> #
它奏效了。
- Rails – 了解application.js和application.css
- Rails中的多个提交按钮/表单
- Rails抛出“REXML :: ParseException没有有效的根”exception
- Ruby – 实例方法:为什么我可以在没有self的情况下使用getter,但只能使用self来设置setter
- void foo(int&x) – > Ruby? 通过引用传递整数?
- 如何在Emacs中开始使用Xiki?
- Rails:获取http响应的值
- ActionController :: RoutingError:未初始化的常量Api :: V1 :: ApiController
- SemiFixed:缺少’secret_key_base`用于’生产’环境