Ruby HTTParty - 获取重定向的 URL

Posted

技术标签:

【中文标题】Ruby HTTParty - 获取重定向的 URL【英文标题】:Ruby HTTParty - get the redirected URL 【发布时间】:2015-12-20 08:04:24 【问题描述】:

我正在尝试使用带有一些参数的 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

当我在浏览器中尝试 URL http://example1.com?a=123&b=456 时,它会重定向到预期的 URL,并像 http://example2.com?c=123trt58 一样附加参数值,但是当我使用 HTTParty 执行此操作时,我只得到一个 html 响应。

我的要求是从响应中获取 URL(http://example2.com?c=123trt58)。

提前致谢。

【问题讨论】:

【参考方案1】:

你可以试试 ruby​​ gem final_redirect_url

【讨论】:

【参考方案2】:

稍微更正@High6 答案:

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

这将阻止大型响应下载。只需阅读标题。

【讨论】:

【参考方案3】:
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 库。

【讨论】:

【参考方案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

【讨论】:

【参考方案5】:

要在使用HTTParty 进行重定向后获取最终 URL,您可以使用:

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

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

【讨论】:

正确的选择是 res = HTTParty.head("example1.com?a=123&b=456") HTTParty.get 将下载所有内容,即使是 100Mb 的视频文件。 @AivilsŠtoss 您应该将其发布为答案

以上是关于Ruby HTTParty - 获取重定向的 URL的主要内容,如果未能解决你的问题,请参考以下文章

ruby HTTParty

使用curl获取Location:重定向后url

使用 post 参数重定向到付款 URL

使用 Rails 和 HTTParty 将 JSON 发布到 API

ruby 使用Rails和Ruby重定向“安全”。

(Ruby,Rails,Javascript)禁用Javascript时重定向/呈现不同的页面......?