邮件请求后,Net :: HTTP不会开始下载文件

时间:2013-12-21 23:03:07

标签: ruby net-http

我正在尝试使用Net::HTTP向特定网站发出POST请求,并在返回响应后开始下载文件。 我首先使用wget对此进行了测试,并且它工作正常。我也尝试使用httpiunirest宝石,它很顺利。但是,因为Net::HTTP是低级API而我需要更多控制(例如,跟踪下载进度),所以我会坚持下去。 问题是,下载只是没有开始。所以这里是代码:

require 'net/http'
require 'tempfile'
uri = URI.parse("http://mywebsite.com")
req = Net::HTTP::Post.new(uri.path)
req.set_form_data({'filed' => 'data'})


response = Net::HTTP.start(uri.hostname, uri.port) {|http|
  http.request(req) do |response|
   temp_file = Tempfile.new("new_file")
   response.read_body do |chunk|
        temp_file << chunk
   end

 end
}

我认为问题必须得到回应,我得到的不是Net::HTTPOKHTTPSeeOther以及此处有关于它的更多信息

      #<Net::HTTPSeeOther:0x91f2670>
            {"server"=>["nginx"], "date"=>["Sat, 21 Dec 2013 22:32:14 GMT"], 
        "content-type"=>["text/html"], "transfer-encoding"=>["chunked"], 
            "connection"=>["keep-alive"], "pragma"=>["no-cache"], 
            "cache-control"=>["no-cache, must-revalidate"], 
    "expires"=>["Sat, 26 Jul 1997 05:00:00 GMT"], 
"location"=>["http://mywebsite.com/path/to/file.rar"]}

我提到的其他2个宝石知道如何自动开始下载,我不知道如何处理HTTPSeeOther。

1 个答案:

答案 0 :(得分:0)

您似乎从服务器获得了重定向响应,wgetcurl和高级库将自动跟随。使用Net::HTTP,您需要向该位置发起新的GET请求。