簡體   English   中英

sysread:到達文件末尾(EOFError)

[英]`sysread': end of file reached (EOFError)

require 'net/http'
require 'uri'
Net::HTTP.get_print URI.parse('https://forums.malwarebytes.org/index.php?showtopic=49893')

我收到如下錯誤:: c:/ruby/lib/ruby/1.8/net/protocol.rb:133:在sysread': end of file reached (EOFError) from c:/ruby/lib/ruby/1.8/net/protocol.rb:133:in :在rbuf_fill中來自c:/ruby/lib/ruby/1.8/timeout.rb:56:在timeout' from c:/ruby/lib/ruby/1.8/timeout.rb:76:in從c:/ruby/lib/ruby/1.8/net/protocol.rb:132超時: rbuf_fill' from c:/ruby/lib/ruby/1.8/net/protocol.rb:116:inrbuf_fill' from c:/ruby/lib/ruby/1.8/net/protocol.rb:116:in直到rbuf_fill從c:/ruby/lib/ruby/1.8/net/protocol.rb:126:在readline' from c:/ruby/lib/ruby/1.8/net/http.rb:2029:in read_status_line中從c:/ ruby / lib / ruby​​ / 1.8 / net / http.rb:2018:在read_new' from c:/ruby/lib/ruby/1.8/net/http.rb:1059:in請求中from c:/ ruby​​ / lib / request_get' from c:/ruby/lib/ruby/1.8/net/http.rb:380:in ruby / 1.8 / net / http.rb:957:來自c:/ruby/lib/ruby/1.8/ net / http.rb:547:in start' from c:/ruby/lib/ruby/1.8/net/http.rb:379:in get_response從c:/ruby/lib/ruby/1.8/net/http。 rbparsing1.rb:3在``get_print''中的rb:337:

我無法在現代紅寶石版本上重現上述行為,但是我想我知道是什么原因造成的。

讓我們逐步深入執行過程:

▶ u = URI.parse('https://forums.malwarebytes.org/index.php?showtopic=49893')
#⇒ #<URI::HTTPS https://forums.malwarebytes.org/index.php?showtopic=49893>

OK, URI了。

▶ Net::HTTP.get_print u
#⇒ <html><head><meta http-equiv='refresh' content='0;
#    url=/index.php?/topic/49893-removal-instructions-for-a-fast-antivirus/'>
#  </head><body></body></html>=> nil

Ooups。 重定向。 讓我們處理一下:

▶ u_redir = Net::HTTP.get(u).scan(/url=(.*?)'/).first.first
#⇒ "/index.php?/topic/49893-removal-instructions-for-a-fast-antivirus/"

▶ u.path, u.query = u_redir.split '?'
#⇒ [
#  [0] "/index.php",
#  [1] "/topic/49893-removal-instructions-for-a-fast-antivirus/"
# ]
▶ Net::HTTP.get_print u
#⇒ [HTML CONTENT]

總結:我想您應該自己處理重定向。

您可以使用以下方法嘗試:

require 'net/http'
require 'uri'

uri = URI.parse('https://forums.malwarebytes.org/index.php?showtopic=49893')


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

res = Net::HTTP.start(uri.host, uri.port,
         :use_ssl => uri.scheme == 'https') {|http| http.request request}
p res.body

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM