Bash - скачать файл, авторизоваться при необходимости

Я использую BASH, и мне нужно загрузить файл TXT, который создается на стороне сервера по запросу. Это означает, что URL-адрес выглядит примерно так:

http://1.1.1.1:4884/page.aspx?fileID=123456&lang=en&Export=1

Export=1 перехватывается приложением .NET, и мне предоставляется файл TXT на основе идентификатора файла.
Если я не вошел в систему, меня перенаправляют на форму входа с ?ReturnUrl в URL-адресе, перенаправляя меня вернуться на мою запрошенную страницу после входа в систему.

Как я могу успешно загрузить этот файл с помощью BASH, cURL/wget/lynx. Он должен быть неинтерактивным.

Я пробовал использовать параметры --cookie для автоматизации curl и wget и lynx (cmd-log). Lynx работал лучше всего, но по какой-то причине запрос на загрузку файла не мог быть автоматизирован.

Пожалуйста помоги. Если потребуется дополнительная информация, предоставлю.


person Anton Asserzon    schedule 21.11.2013    source источник
comment
wget имеет опции --http-password и --http-user... попробуйте их... Для получения дополнительной информации проверьте man wget... Если ничего не работает, попробуйте утилиту expect. Возможно, вам придется установить его отдельно. (Подробнее см. man expect.)   -  person anishsane    schedule 21.11.2013
comment
Я знаком с ожидаемым. Как вы думаете, как это можно использовать здесь? Что касается параметров --http-password/user, они не поддерживают аутентификацию на основе формы.   -  person Anton Asserzon    schedule 21.11.2013
comment
О, это аутентификация на основе форм? это не было упомянуто в вопросе, или, может быть, я пропустил это...   -  person anishsane    schedule 21.11.2013


Ответы (1)


  1. Используйте завиток.
  2. Code following approach:
    • try to download the file
    • если не удалось (перенаправлено на страницу входа), войдите в систему и перейдите к началу
  3. Вам всегда нужно использовать параметр -c curl для хранения файлов cookie между вызовами curl
  4. Для авторизации с помощью curl нужно знать форму на сервере, а именно: названия полей, в которые вы обычно вводите логин и пароль.
  5. Чтобы отправить данные на сервер, используйте опцию -d curl. Чтобы отправить файл cookie на сервер, используйте -b (или --cookie).
person ArturFH    schedule 21.11.2013
comment
Пробовал: anton@hostname ~ $ curl -c -d "txtUsername=admin&txtPassword=admin" http://1.1.1.1:4884/FormLoginAuth.aspx. Результат: источник FormLoginAuth.aspx напечатан в stdout. Тот же результат при использовании --data="txtUsername=admin&txtPassword=admin" - person Anton Asserzon; 21.11.2013