Форум сайта python.su
Возникла такая вот проблема, которую не могу решить своими силами.
Коротко словами: Требуется аутентификация при обращении на https страницу. Там мы вводим логин с паролем и после этого сервер всегда перенаправляет нас на один из двух url: в случае успеха или в случае удачи. Проблема в том, что в обоих случаях он выдает ошибку 302 (это у него такая особенность и от меня это не зависит). Все-бы ничего, но я urllib в этом случае завершает свою работу с генерацией ошибки, хотя успешный переход на новый url происходит.
Собственно, код:
import urllib.request, http.client http.client.HTTPConnection.debuglevel = 1 params = urllib.parse.urlencode({'login': '***', 'password': '***'}) params = params.encode('utf-8') request = urllib.request.Request('https://*****/login.php', data=params) opener = urllib.request.build_opener() # тут были попытки сделать свой RedirectHandler и ErrorProcessor f = opener.open(request) >>> Traceback (most recent call last): ...... urllib.error.HTTPError: HTTP Error 302: Found - Redirection to url '/interface.php' is not allowed
Офлайн
POST Запрос редиректится, а urllib это не нравится:
FancyURLopener
Note According to the letter of RFC 2616, 301 and 302 responses to POST requests must not be automatically redirected without confirmation by the user. In reality, browsers do allow automatic redirection of these responses, changing the POST to a GET, and urllib reproduces this behaviour.
Офлайн
Спасибо за инфо.
Если я ловлю эту ошибку (HTTPError 302), то по ней я могу узнать, что переключение произошло на ту страницу, которая считается successful. А подключив обработку кукисов, сервер еще и выдает SESSID.
# возможно, это чопорно, но смог таким образом получить cookie от сервера, хотя urllib и ругается на 302 ошибку j = http.cookiejar.CookieJar() ..... cookie_proc = urllib.request.HTTPCookieProcessor( j ) opener = urllib.request.build_opener( cookie_proc ) .....
Отредактировано Isem (Июнь 24, 2012 11:12:46)
Офлайн
Isemhttp.client.HTTPSConnection() ?
Требуется аутентификация при обращении на https страницу. Там мы вводим логин с паролем и после этого сервер всегда перенаправляет нас на один из двух url: в случае успеха или в случае удачи.
Офлайн
py.user.nextС помощью этих классов я даже не смог залогиниться, уж не знаю почему. Поэтому переключился на urllib после гугливания.
http.client.HTTPSConnection() ?
Офлайн
Isemа как ты логинился ?
я даже не смог залогиниться, уж не знаю почему
Отредактировано py.user.next (Июнь 24, 2012 11:36:55)
Офлайн
py.user.nextНу сам логин проходит. Но я что-то не нашел, как ловить в этом случае редирект и кукисы.
а как ты логинился ?
Отредактировано Isem (Июнь 25, 2012 07:59:12)
Офлайн
Isemа что там в ответе ?
Ну сам логин проходит. Но я что-то не нашел, как ловить в этом случае редирект и кукисы.
Офлайн