Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 10, 2012 13:48:22

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на сайте с помощью requests

Всем доброго дня!

Для авторизации на сайте я отправляю несколько post запросов с данными, т.е. повторяю действия которые показал сниффер…

В один прекрасный момент после post запроса происходит редирект…
Так вот сниффер мне показывает что после редиректа, Ip ресурса должен оставаться прежним, меняется только ссылка, а в моем коде редирект отправляет запрос на другой ip…

Может ли быть это разрыв сессии? Какие могут быть причины этого?



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#2 Авг. 10, 2012 14:37:56

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

Авторизация на сайте с помощью requests

Без конкретных данных (код, адреса, лог, запросы) сложно ответить .
Может там так и задумано, что один общий сервер авторизации для нескольких проектов (как Гугл, лостфильм и т.п.).

Офлайн

#3 Авг. 10, 2012 20:05:08

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на сайте с помощью requests

Тогда у меня такой вопрос:
Если я отправляю Post запрос с параметрами, например:

payload = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
r = requests.post("http://httpbin.org/post", data=payload)

а так как словарь это неупорядоченный (в отличие от строк и списков) набор пар “ключ:значение”

То в сниффере я вижу что у меня параметры выстраиваются в разнобой, т.е.
payload может стать {'key3': ‘value3’, ‘key1’: ‘value1’, ‘key2’: ‘value2’}

Может ли это как-нибудь влиять на ответ сервера, не нарушает ли это структуру запроса?
Просто браузер всегда отправляет параметры выстроенные в определенной последовательности…



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#4 Авг. 10, 2012 22:16:55

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

Авторизация на сайте с помощью requests

Очень сомневаюсь. Сервер на своей стороне загоняет их обратно в хеш-массив.
Чтобы выводить параметры в оригинальном порядке, можно попробовать передавать массив пар, или воспользоваться OrderedDict.

Офлайн

#5 Авг. 10, 2012 22:17:40

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

Авторизация на сайте с помощью requests

Seganapa
Может ли это как-нибудь влиять на ответ сервера, не нарушает ли это структуру запроса?
Зависит от приложения на сервере, но вообще не должно.

Можно отправить и упорядоченные значения. Для этого нужно в data передать список кортежей - (имя, значение)
payload = [('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')]

Офлайн

#6 Авг. 11, 2012 02:14:10

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

Авторизация на сайте с помощью requests

Небольшой совет: почему бы не оформить это так? Один вызов = один запрос.

r = requests.post("http://httpbin.org/post", data={
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3',
})

Или так:

r = requests.post("http://httpbin.org/post", data=[
    ('key1': 'value1'), 
    ('key2': 'value2'), 
    ('key3': 'value3'),
])

Отредактировано odnochlen (Авг. 11, 2012 02:15:28)

Офлайн

#7 Авг. 12, 2012 13:19:48

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на сайте с помощью requests

А если это применимо к json.dumps?

Например:

import json
json_arg = json.dumps({
                      "name": "qwery", 
                      "password": "psa", 
                      "passwordhash": "", 
                      "autologin": False
                      })
print json_arg

На выводе {“password”: “psa”, “passwordhash”: “”, “name”: “qwery”, “autologin”: false}
Т.е. порядок данных нарушен… А json.dumps принимает данные только в виде словаря… Как быть в таком случае?



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#8 Авг. 12, 2012 13:25:48

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

Авторизация на сайте с помощью requests

odnochlen
…воспользоваться OrderedDict.
import json
from collections import OrderedDict
 
json_arg = json.dumps(OrderedDict([
                          ("name", "qwery"), 
                          ("password", "psa"), 
                          ("passwordhash", ""), 
                          ("autologin", False),
                      ]))
print json_arg

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version