Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 9, 2012 23:56:59

theyoba
Зарегистрирован: 2012-10-03
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на сайте

Всем привет!
Пытаюсь с помощью библиотеки Requests авторизоваться на одном сайте.

Передаю post-параметры:

params = { 'login':'%CC%F3%F5%E0', 'password':'123456qwerty'}
r2 = requests.post('http://www.******.ru/login/', data=params, headers=header2, allow_redirects=False, cookies=r.cookies, proxies=proxies)
через fiddler2 вижу что передается совсем не то
login=%25CC%25F3%25F5%25E0
то есть знак процента кодируется в %25.
Подскажите пожалуйста, как это можно обойти?

Отредактировано theyoba (Окт. 9, 2012 23:57:38)

Офлайн

#2 Окт. 10, 2012 07:15:55

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Авторизация на сайте

Нужно передавать исходную строку, requests сам закодирует

params = { 'login': '\xcc\xf3\xf5\xe0', ...

Я так понял, это ‘Муха’ в кодировке ‘cp1251’? Уверены что сервер в такой кодировке примет? Вроде обычно utf-8 используют. Тогда для Python 2.x:
params = { 'login': u'Муха', ...

Офлайн

#3 Окт. 10, 2012 09:59:32

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Авторизация на сайте

cookies=r.cookies
Если нужна сессия - используй session.

Офлайн

#4 Окт. 10, 2012 10:21:36

theyoba
Зарегистрирован: 2012-10-03
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на сайте

reclosedev
Если авторизаоваться на том сайте самому, через браузер, в качестве логина передается почему-то %CC%F3%F5%E0.
Если делать через utf-8, то передается в следующем виде:

login=%D0%9C%D1%83%D1%85%D0%B0
Если
params = { 'login': '\xcc\xf3\xf5\xe0', ...
то очень долго идет запрос post, а потом выдается следующая ошибка



odnochlen
Спасибо, почитаю про сессии.

Офлайн

#5 Окт. 10, 2012 11:47:17

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Авторизация на сайте

Вот пример сессии

import requests
with requests.session() as s:
    resp = s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
    print resp.text
    print resp.cookies
    resp = s.get('http://httpbin.org/cookies/set/sessioncooki/1')
    print resp.text
    print resp.cookies
    resp = s.get('http://httpbin.org/cookies')
    print resp.text
    print resp.cookies

Можно и так
s=requests.session()
s.get(...)

Посмотри сниффером, что на самом деле отправляется.

Насчет кодировки - интересно, а как браузер ее выбирает? По кодировке страницы?

Офлайн

#6 Окт. 10, 2012 23:28:53

theyoba
Зарегистрирован: 2012-10-03
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на сайте

odnochlen
Посмотри сниффером, что на самом деле отправляется.
Так я же и смотрю через Fiddler2
theyoba
Если делать через utf-8, то передается в следующем виде:
login=%D0%9C%D1%83%D1%85%D0%B0
Если
params = { 'login': '\xcc\xf3\xf5\xe0', ...
то очень долго идет запрос post, а потом выдается следующая ошибка


Может есть какой-то способ экранировать знак %?
Пробовал ставить %%, вот так %%CC%%F3%%F5%%E0
декодирует все равно на %25%25CC%25%25F3%25%25F5%25%25E0

Отредактировано theyoba (Окт. 10, 2012 23:38:10)

Офлайн

#7 Окт. 11, 2012 02:16:09

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Авторизация на сайте

theyoba
то очень долго идет запрос post, а потом выдается следующая ошибка
Так он вообще ничего не отправляет или как?

То, что тебе нужно - закодировать параметр в нужной кодировке

Edit: хехехе, нашел
requests.post('http://www.******.ru/login/', data = {
        'login': u'Муха'.decode('cp1251'),
        #...
    },
    allow_redirects=False)


Офлайн

#8 Окт. 11, 2012 22:49:22

theyoba
Зарегистрирован: 2012-10-03
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на сайте

odnochlen
хехехе, нашел
К сожалению, почему-то преобразует “Муху” в иероглифы

Офлайн

#9 Окт. 12, 2012 00:10:11

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Авторизация на сайте

А ты в исходнике ничего не напортил? УМВР. Кодировка указана?

Офлайн

#10 Окт. 12, 2012 16:51:10

theyoba
Зарегистрирован: 2012-10-03
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на сайте

odnochlen
В notepad++ посмотрел - преобразовано в UTF-8 без BOM.
в начале исходника прописано

# -*- coding: utf-8 -*-
И все равно ошибка, правда теперь другая Из-за этого программа дальше не выполняется и запрос не идет


А у вас прямо в Fiddler все хорошо выводит?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version