2012-11-29 102 views
1

即使存在URL,我仍然在Ruby中將錯誤連接到下面列出的URL。這是爲什麼?無法通過Ruby獲取URL響應

1.9.3p194 :003 > require 'uri' 
=> true 
1.9.3p194 :004 > require 'net/http' 
=> true 
1.9.3p194 :005 > url = "https://blogs.oracle.com/ksplice/entry/introducing_redpatch" 
=> "https://blogs.oracle.com/ksplice/entry/introducing_redpatch" 
1.9.3p194 :006 > url_parsed = URI.parse(url) 
=> #<URI::HTTPS:0x00000001939288 URL:https://blogs.oracle.com/ksplice/entry/introducing_redpatch> 
1.9.3p194 :007 > response = Net::HTTP.get_response(url_parsed) 
Errno::ECONNRESET: Connection reset by peer 

回答

2

而不是使用Net :: HTTP,簡化你的生活,並使用Ruby的OpenURI。除非您需要低級別的控制權或低級值的可視性,否則您會發現OpenURI足夠好:

require 'open-uri' 
url = "https://blogs.oracle.com/ksplice/entry/introducing_redpatch" 
open(url).read.size 
=> 35493 
+0

有了OpenURI,有可能獲得響應代碼嗎? (對於舊的方法,我使用了'response.code'。) –

+0

是的,它在關於使用'open'的塊的文檔中。使用'status'方法。 –

2

使用此

url = "https://blogs.oracle.com/ksplice/entry/introducing_redpatch" 
uri = URI.parse(url) 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

request = Net::HTTP::Get.new(uri.request_uri) 

response = http.request(request) 
response.body 

它是從這裏取:http://www.rubyinside.com/nethttp-cheat-sheet-2940.html

+1

小心安全! –

+0

這是什麼意思'http.use_ssl = true'?爲什麼我們必須使用SSL? –

+1

@Mika https使用SSL,它是HTTP加SSL – bjhaid