Ruby HTTParty - 获取重定向的URL

时间:2015-09-23 06:09:48

标签: http ruby-on-rails-4 httparty ruby-2.2

我正在尝试使用带有一些参数的 HTTParty 发送HTTP请求,

例如:

GET URL: http://example1.com?a=123&b=456

response_to_get = HTTParty.get('http://example1.com?a=123&b=456')

此特定请求的 redirect_url http://example2.com

当我在浏览器中尝试使用网址http://example1.com?a=123&b=456时,它会重定向到预期的网址,其中附加了参数值,如http://example2.com?c=123trt58,但是当我使用HTTParty执行此操作时,我得到的是HTML仅响应。

我的要求是从响应中取出网址http://example2.com?c=123trt58)。

先谢谢。

5 个答案:

答案 0 :(得分:4)

如果您不想关注重定向,但仍想知道网页重定向到哪里(例如对网络抓取工具有用),则可以使用response.headers['location']

response = HTTParty.get('http://httpstat.us/301', follow_redirects: false)

if response.code >= 300 && response.code < 400
    redirect_url = response.headers['location']
end

答案 1 :(得分:2)

要使用HTTParty进行重定向后获取最终到达网址,您可以使用:

res = HTTParty.get("http://example1.com?a=123&b=456")
res.request.last_uri.to_s

# response should be 'http://example2.com?c=123trt58'

答案 2 :(得分:1)

require 'uri'
require 'net/http'

url = URI("https://<whatever>")

req = Net::HTTP::Get.new(url)
res = Net::HTTP.start(url.host, url.port, :use_ssl => true) {|http|
  http.request(req)
}

res['location']

PS:这是使用原生ruby HTTP lib。

答案 3 :(得分:0)

稍微纠正@High6回答:

    res = HTTParty.head("example1.com?a=123&b=456")
    res.request.last_uri.to_s

这样可以防止大量响应下载。只需阅读标题。

答案 4 :(得分:0)

您可以尝试ruby gem final_redirect_url