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

I am getting an error as follows:: c:/ruby/lib/ruby/1.8/net/protocol.rb:133:in sysread': end of file reached (EOFError) from c:/ruby/lib/ruby/1.8/net/protocol.rb:133:inrbuf_fill' from c:/ruby/lib/ruby/1.8/timeout.rb:56:in timeout' from c:/ruby/lib/ruby/1.8/timeout.rb:76:intimeout' from c:/ruby/lib/ruby/1.8/net/protocol.rb:132:in rbuf_fill' from c:/ruby/lib/ruby/1.8/net/protocol.rb:116:inreaduntil' from c:/ruby/lib/ruby/1.8/net/protocol.rb:126:in readline' from c:/ruby/lib/ruby/1.8/net/http.rb:2029:inread_status_line' from c:/ruby/lib/ruby/1.8/net/http.rb:2018:in read_new' from c:/ruby/lib/ruby/1.8/net/http.rb:1059:inrequest' from c:/ruby/lib/ruby/1.8/net/http.rb:957:in request_get' from c:/ruby/lib/ruby/1.8/net/http.rb:380:inget_response' from c:/ruby/lib/ruby/1.8/net/http.rb:547:in start' from c:/ruby/lib/ruby/1.8/net/http.rb:379:inget_response' from c:/ruby/lib/ruby/1.8/net/http.rb:337:in `get_print' from urlparsing1.rb:3

2

2 Answers

0
votes

I can’t reproduce the aforementioned behaviour on modern ruby version, but I think I know what causes it.

Let’s dive into execution process step by step:

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

OK, URI got.

▶ 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. Redirect. Let’s handle it:

▶ 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]

The summing up: I would guess you should handle redirects yourselves.

0
votes

You can try by using this:

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