如果open-uri有效,为什么net / http会返回一个空字符串?

时间:2015-05-13 08:27:04

标签: ruby-on-rails ruby net-http open-uri

我正在尝试从维基百科下载页面。对于这样的任务,我使用的是宝石。使用 net / http 时,我得到的只是一个空字符串。所以我尝试使用 open-uri ,它运行正常。

然而,我更喜欢第一种选择,因为它给了我更明确的控制;但为什么它会返回一个空字符串?

class Downloader
    attr_accessor :entry, :url, :page

    def initialize
        # require 'net/http'
        require 'open-uri'
    end

    def getEntry
        print "Article name? "
        @entry = gets.chomp
    end

    def getURL(entry)

        if entry.include?(" ")
            @url = "http://en.wikipedia.org/wiki/" + entry.gsub!(/\s/, "_")
        else
            @url = "http://en.wikipedia.org/wiki/" + entry
        end
        @url.downcase!
    end

    def getPage(url)

=begin THIS FAULTY SOLUTION RETURNS AN EMPTY STRING ???
        connector = URI.parse(url)
        connection = Net::HTTP.start(connector.host, connector.port) do |http|
            http.get(connector.path)
        end
        puts "Body:"
        @page = connection.body
=end

        @page = open(url).read
    end

end

test = Downloader.new
test.getEntry
test.getURL(test.entry)
test.getPage(test.url)
puts test.page

P.S。:我是一名自学成才的程序员,因此代码可能不符合良好做法。道歉。

1 个答案:

答案 0 :(得分:1)

由于您的请求返回301 Redirect(检查connection.code值),因此如果您使用net/http,则应手动关注重定向。 Here是更多详情。