2015-09-23 32 views
5

próbuję wysłać żądanie HTTP przy użyciu HTTParty z niektórych parametrów,Ruby HTTParty - uzyskać przekierowany URL

np

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

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

REDIRECT_URL dla tego konkretnego wniosku jest http://example2.com

Po wypróbowaniu adresu URL http://example1.com?a=123&b=456 w przeglądarce przekierowuje do oczekiwanego adresu URL z dodaną wartością parametru, taką jak http://example2.com?c=123trt58, ale kiedy zrobiłem to za pomocą HTTParty, otrzymuję tylko odpowiedź HTML.

Moim żądaniem jest uzyskanie adresu URL (http://example2.com?c=123trt58) z odpowiedzi.

Dzięki z góry.

Odpowiedz

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: Używa macierzystej biblioteki HTTP ruby.

2

Aby uzyskać końcowy URL po przekierowanie przy użyciu HTTParty można użyć:

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

Prawo wyboru jest res = HTTParty.head ("http://example1.com?a=123&b=456") HTTParty.get pobierze wszystkie treści nawet, że jest 100Mb wideo plik. –

+0

@ AivilsŠtoss powinieneś zamieścić to jako odpowiedź – Stefan

4

Jeśli nie chcesz śledzić przekierowania, ale chce wiedzieć, gdzie strona przekierowuje do (użyteczne dla robotów indeksujących , na przykład), można użyć 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

Nieznacznie poprawił @ High6 odpowiedź:

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

Zapobiegnie to pobieraniu dużych odpowiedzi. Po prostu przeczytaj nagłówki.