как узнать, использует ли веб-сайт куки или аутентификацию на основе http - PullRequest
1 голос
/ 15 октября 2010

Я пытаюсь автоматизировать загрузку файлов через веб-сервер.Я планирую использовать wget или curl или python urllib / urllib2.

В большинстве решений используются wget, urllib и urllib2.Все они говорят об аутентификации на основе HHTP и аутентификации на основе файлов cookie.Моя проблема в том, что я не знаю, какой из них используется на веб-сайте, где хранятся мои данные.Вот взаимодействие с сайтом:

  1. Обычно я захожу на сайт http://www.anysite.com/index.cgi?
  2. Я получаю форму с логином и паролем.Я набираю оба и нажимаю клавишу возврата.
  3. URL остается как http://www.anysite.com/index.cgi? в течение всего взаимодействия.Но теперь у меня есть список папок и файлов
  4. Если я щелкну папку или файл, URL-адрес изменится на http://shamrockstructures.com/cgi-bin/index.cgi?page=download&file=%2Fhome%2Fjanysite%2Fpublic_html%2Fuser_data%2Fuserareas%2Ffile.tar.bz2

И браузер предоставит мне возможность сохранитьfile

Я хочу знать, как определить, использует ли сайт аутентификацию по HTTP или cookie.После чего я предполагаю, что я могу использовать cookielib или urllib2 в python для подключения к нему, получить список файлов и папок и рекурсивно загрузить все, оставаясь на связи.

pS: я пробовал способы подключения печеньячерез wget и wget --http-user "uname" --http-password "passwd" http://www.anysite.com/index.cgi?, но они возвращают мне только веб-форму.

Ответы [ 3 ]

2 голосов
/ 15 октября 2010

Если вы входите через веб-страницу, сайт, вероятно, использует аутентификацию на основе файлов cookie. (Технически он может использовать базовую аутентификацию HTTP, встраивая свои учетные данные в URI, но в большинстве случаев это будет глупо.) Если вы получите отдельный маленький диалог с полем имени пользователя и пароля ( как этот ), он использует базовую аутентификацию HTTP.

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

В наши дни большинство сайтов используют аутентификацию на основе файлов cookie. Чтобы сделать это с помощью HTTP-cilent, такого как urllib2, вам нужно будет выполнить HTTP POST полей в форме входа в систему. (Возможно, вам сначала потребуется запросить форму входа в систему, так как сайт может содержать cookie-файл, который вам даже необходим для входа, но обычно это не обязательно.) Это должно вернуть страницу «успешно вошел в систему», которую вы можете проверить , Сохраните куки, которые вы получите по этому запросу. При выполнении следующего запроса, включите эти куки. Каждый ваш запрос может отвечать куки-файлами, и вам нужно сохранить их и отправить их снова со следующим запросом.

urllib2 имеет функцию, называемую «jar cookie», которая автоматически обрабатывает файлы cookie для вас при отправке запросов и получении веб-страниц. Это то, что вы хотите.

1 голос
/ 16 октября 2010

Вы можете использовать pycurl следующим образом:

import pycurl

COOKIE_JAR = 'cookiejar' # file to store the cookies
LOGIN_URL = 'http://www.yoursite.com/login.cgi'
USER_FIELD = 'user' # Name of the element in the HTML form
USER = 'joe'
PASSWD_FIELD = 'passwd' # Name of the element in the HTML form
PASSWD = 'MySecretPassword'

def read(html):
    """Read the body of the response, with posible                                                                                                                               
    future html parsing and re-requesting"""
    print html

com = pycurl.Curl()
com.setopt(pycurl.WRITEFUNCTION, read)
com.setopt(pycurl.COOKIEJAR, COOKIE_JAR)
com.setopt(pycurl.FOLLOWLOCATION, 1) # follow redirects
com.setopt(pycurl.POST, 1)
com.setopt(pycurl.POSTFIELDS, '%s=%s;%s=%s'%(USER_FIELD, USER,
                                             PASSWD_FIELD, PASSWD))
com.setopt(pycurl.URL, LOGIN_URL )
com.perform()

Обычный pyururl может показаться очень «примитивным» (с ограниченным подходом setopt), но он выполняет свою работу и довольно хорошо обрабатывает файлы cookie с помощьюопция баночки для печенья.

0 голосов
/ 15 октября 2010

Проверка подлинности на основе файлов cookie AFAIK используется только после успешного входа в систему по крайней мере ОДИН РАЗ.Вы можете попробовать отключить сохранение файлов cookie из этого домена, изменив настройки браузера, если вы все еще можете загружать файлы, которые должны проходить проверку подлинности на основе HTTP.

Попробуйте выполнить эквивалентный запрос GET для (возможно, POST)запрос на вход, который, вероятно, происходит прямо сейчас для входа в систему.Используйте firebug или fiddler, чтобы увидеть отправленный запрос на вход.Также обратите внимание, что существует некоторый код JavaScript, который возвращает вам другой вывод, основанный на вашей строке useragent или каком-либо другом параметре.

Проверьте, помогает ли httplib , mechanize .

...