2013-06-14 30 views
8

Używam biblioteki Scala dispatch HTTP, wersja 0.10.1. Przesyłam żądanie do adresu URL, który zwraca stałe przekierowanie HTTP 301. Na przykład http://wikipedia.com zwraca 301, który przekierowuje do http://www.wikipedia.org/. Jak mogę użyć wysyłki do uzyskania przekierowanego adresu URL?Jak korzystać z wysyłki Scala, aby uzyskać adres URL zwrócony w przekierowaniu 301?

Po tutorialu, oto co zrobiłem.

import dispatch._, Defaults._ 
val svc = url("http://wikipedia.com") 
val r = Http(svc OK as.String) 
r() 

Powoduje to zgłoszenie "Niespodziewany status odpowiedzi: 301". Przypuszczalnie muszę albo zapytać o wartość r dla przekierowanego adresu URL, albo podać w jego definicji inny argument niż OK, ale nie mogę się dowiedzieć, co zrobić z dokumentacji.

+0

Wysłanie zmieniła się wiele od 0,8 do 0,9 do 0,10 więc należy stwierdzić, która wersja” ponownie używać. –

+0

Zaktualizowano oryginalne pytanie. Używam najnowszych i najlepszych. –

Odpowiedz

11

Konfiguracja podstawowa asyncClient śledzić przekierowania:

val r = Http.configure(_ setFollowRedirects true)(svc OK as.String) 

Aby uzyskać przekierowany URL:

val svc = url("http://wikipedia.com/") 
val r = Http(svc > (x => x)) 
val res = r() 

println(res.getHeader("Location")) 
+0

To działało. Jak mogę uzyskać aktualny nowy adres URL http://www.wikipedia.org/ z 'r'? –

+0

Możesz również napisać 'def redir (s: String) = {val r = Http (url (s)> (x => x.getHeader (" Location "))); r()}' –

+0

Jeśli 'setFollowRedirects' nie działa dla ciebie, spróbuj zamiast tego 'setFollowRedirect' (bez ciągnięcia' s'). – ffriend