Crystal-lang: как найти конечный URL после перенаправления? - PullRequest
0 голосов
/ 10 сентября 2018

В данный момент я просто погружаюсь в воду с помощью Crystal и в качестве упражнения пытаюсь перенести один из моих скриптов на Python.

Данный скрипт загружает «последний» PDFс URL-адреса, который принимает форму: «http://somesite.com/download/latest/". При посещении этот URL-адрес автоматически перенаправляется на страницу для последней загрузки, например.» http://somesite.com/download/4563/"

У меня возникают трудности при разработке способа реализацииэто в Crystal, чтобы я мог получить фактический URL-адрес, на котором заканчивается перенаправление.

В Python я делаю:

currenturl = urllib.request.urlopen(latesturl)
#above will redirect to URL of format http://somesite.com/download/XXXXX/
#where XXXXX is the current d/load
endurl = currenturl.geturl()

..., что дает мне конечный URL в переменной "endurl".

Но, чтение документов для Crystal "http / client" Я не вижу способа вернуть фактический URL, на котором заканчивается перенаправление.Возможно ли это?

1 Ответ

0 голосов
/ 10 сентября 2018

Кристалл HTTP::Client в настоящее время не может автоматически следовать за перенаправлениями.

Обратите внимание, что вы читаете устаревшую версию документации по API. Текущая версия: https://crystal -lang.org / api / latest / HTTP / Client.html (я не думаю, что между 0.24.1 и 0.26.1 произошли соответствующие изменения).

Но вы можете легко получить доступ к URL перенаправления, прочитав заголовок Location ответа HTTP:

response = HTTP::Client.get latesturl
endurl = response.headers["Location"]
...