5

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

例如:

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

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

此特定请求的redirect_urlhttp://example2.com

当我http://example1.com?a=123&b=456在浏览器中尝试 URL 时,它会重定向到带有参数值的预期 URL http://example2.com?c=123trt58,但是当我使用 HTTParty 时,我只得到一个 HTML 响应。

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

提前致谢。

4

5 回答 5

8

如果您不想跟踪重定向,但仍想知道页面重定向到的位置(例如,对网络爬虫很有用),您可以使用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
于 2016-09-05T07:58:32.723 回答
4

稍微更正@High6 答案:

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

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

于 2017-01-31T13:37:49.573 回答
2

要使用重定向后获取最终 URL,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'
于 2015-12-21T16:25:50.440 回答
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 库。

于 2015-09-23T07:43:39.707 回答
0

你可以试试 ruby​​ gem final_redirect_url

于 2017-05-03T05:13:49.300 回答