我正在尝试使用带有一些参数的 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)。
先谢谢。
答案 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