2015-09-23 3 views
5

Я пытаюсь отправить запрос HTTP, используя HTTParty с некоторыми параметрами,Рубин HTTParty - получить перенаправлены URL

Например:

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
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.

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' 
+0

Правильный выбор является Рез = HTTParty.head («http://example1.com?a=123&b=456») HTTParty.get загрузит все содержание даже это 100Mb видео файл. –

+0

@ AivilsŠtoss вы должны опубликовать это как ответ – Stefan

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 
0

Немного исправлен @ High6 ответ:

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

Это предотвратит загрузку больших ответов. Просто прочитайте заголовки.