Как использовать диспетчеризацию Scala для получения URL-адреса, возвращенного при перенаправлении 301?
Я использую библиотеку HTTP диспетчеризации Scala, версия 0.10.1. Я делаю запрос на URL-адрес, который возвращает HTTP 301, постоянное перенаправление. Например, http://wikipedia.com/ возвращает 301, который перенаправляет на http://www.wikipedia.org/. Как мне использовать диспетчеризацию для получения перенаправленного URL?
После урока, вот что я сделал.
import dispatch._, Defaults._
val svc = url("http://wikipedia.com")
val r = Http(svc OK as.String)
r()
Это вызывает исключение "Неожиданный статус ответа: 301". Предположительно мне нужно либо запросить r
значение для перенаправленного URL, или, возможно, указать какой-либо аргумент, кроме OK
в его определении, но я не могу понять, что делать из документации.
2 ответа
Решение
Настройте базовый asyncClient для следования перенаправлениям:
val r = Http.configure(_ setFollowRedirects true)(svc OK as.String)
Чтобы получить перенаправленный URL:
val svc = url("http://wikipedia.com/")
val r = Http(svc > (x => x))
val res = r()
println(res.getHeader("Location"))
отправка/перезагрузка v1.2.0:
val myRequest = url(theUrl)
def myGet = myRequest.GET
def myGetFollowRedi = myGet.setFollowRedirects(true)
def myRequestWithHeader = myGetFollowRedi <:< Map(
"User-Agent" -> "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.",
"Accept" -> "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.",
"Accept-Language" -> "de-DE,de;q=0.9,en-US;q=0.7,en;q=0.6,en-GB;q=0.4,nl-NL;q=0.3,nl;q=0.1",
"Accept-Encoding" -> "gzip, deflate, br",
"DNT" -> "1",
"Connection" -> "keep-alive",
"Upgrade-Insecure-Requests" -> "1",
"Sec-Fetch-Dest" -> "document",
"Sec-Fetch-Mode" -> "navigate",
"Sec-Fetch-Site" -> "none",
"Sec-Fetch-User" -> "?1"
)