Очень маловероятно, что механизм для этого существует. Просто думайте о том, сколько путей там состоит в том, чтобы изменить значение огибающей переменной в оболочке.
У Вас может быть некоторая удача с set -x
все же.
HTTP поддерживает аутентификацию исходно, и это - то, что Вы использовали. Собственная Аутентификация HTTP редко используется, как бы то ни было. HTTP также позволяет данным формы быть отправленными на сервер; большинство веб-сайтов, включая тот, с которым Вы пытаетесь работать, использует эту основанную на форме аутентификацию вместо Аутентификации HTTP, потому что это более удобно для пользователя и настраиваемо.
Когда клиент HTTP запрашивает ресурс с сервера HTTP, много данных отправляется в HTTP-заголовке. Важная часть для основанной на форме аутентификации является cookie. Cookie является просто названием ряда key=value пары. Несколько cookie могут быть отправлены в Запросе HTTP.
Когда запрос на ограниченный ресурс войдет, сервер будет искать определенный аутентификационный маркер в сеансовых куки. Если это не существует, это означает, что клиент не вошел в систему, таким образом, это возвращает форму входа в систему вместо требуемого ресурса. Если маркер действительно существует и допустим, это означает, что клиент вошел в систему, таким образом, сервер возвращает ресурс, который требовали.
Так, как мы получаем тот специальный аутентификационный маркер, и как мы отправляем его? Мы получаем его путем утверждания, что вход в систему формируется с допустимыми данными. После того как сервер аутентифицирует клиент, он передает cookie обратно в HTTP-заголовке. Мы должны сохранить тот cookie и передать его в со всеми будущими запросами.
Просмотрите источник для страницы входа в систему. Вы уже загрузили, это с помощью wget, просто откройте это в текстовом редакторе. Искать <form...>
в источнике. В целом могут быть несколько, и Вам, возможно, придется выяснить, какой - для представления данных входа в систему. В том Вы работаете с теперь, существует всего одна форма. Затем ищите весь <input...>
теги. Они имеют данные, которые будут отправлены как часть данных формы. Особенно интересный name=...
часть. Это - ключевая роль key=value пары, и независимо от того, что Вы заполняете, часть значения.
Страница, с которой Вы работаете, имеет следующие поля Login
, Password
, AdminSiteaccessURI
, LoginButton
, и RedirectURI
. </form>
конец формы - Вы не должны выглядеть дальнейшими. Мы должны отправить все те ключи с соответствующими значениями. Некоторые значения заполнены в Вами - который включает Login
и Password
, другие, можно принять значение, которое уже присутствует в поле. Если Вы смотрите на RedirectURI
, Вы будете видеть, что это имеет a value=
атрибут сервер заполнил URI для фактического ресурса, который Вы запрашивали во-первых.
Существует еще одна основная информация: где и как мы отправляем данные? Это может быть найдено в <form...>
тег. Это будет иметь метод и действие. Действие не имеет полного URL; это имеет URL относительно основы, но Вам будет нужен полный URL, поэтому добавьте основу к относительному URL. Действием является URL для представления, и действие сообщает, является ли это POST или ПОЛУЧИТЬ запрос. Страница Вы работаете с потребностями данные, отправленные с помощью метода POST.
Теперь, когда мы знаем то, что мы собираемся отправить, мы должны на самом деле сделать это. Мы можем использовать wget
для этого. При рассмотрении страницы справочника Вы найдете a --post-data=string
опция; это показывает Вам, как отформатировать его: key1=value1&key2=value2...
. Это просто key=value для каждой пары, связанной a &
. Это не единственная опция, в которой мы нуждаемся.
Помнить аутентификационный маркер? Сервер передаст его обратно как часть ответа, и мы должны сохранить его. Просматривая страницу справочника снова для "cookie", Вы будете видеть несколько важных опций. --save-cookies file
и --keep-session-cookies
.
Создайте свою командную строку с теми опциями и выполните ее, имея в виду URL, которому Вы отправляете, не ресурс, который Вы первоначально пытались получить - необходимо отправить URL, на который указывают <form action=...>
атрибут. Необходимо закончить с сеансовыми куки в файле, и возможно (если wget успешно следует за перенаправлениями HTTP), файл PDF как вывод. Если это не получило файл PDF, Вы просто отправите другой запрос (на этот раз ни с кем --post-data
), но на этот раз, включайте cookie, которые Вы сохранили перед использованием '-файл cookie загрузки'.
Это должно сделать это!
wget --load-cookies /path/to/cookie.txt
. – Gilles 'SO- stop being evil' 30.08.2011, 00:18