Найти - Пользователи
Полная версия: Авторизация на сайте с помощью requests
Начало » Python для новичков » Авторизация на сайте с помощью requests
1
Seganapa
Всем доброго дня!

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

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

Может ли быть это разрыв сессии? Какие могут быть причины этого?
reclosedev
Без конкретных данных (код, адреса, лог, запросы) сложно ответить .
Может там так и задумано, что один общий сервер авторизации для нескольких проектов (как Гугл, лостфильм и т.п.).
Seganapa
Тогда у меня такой вопрос:
Если я отправляю Post запрос с параметрами, например:
payload = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
r = requests.post("http://httpbin.org/post", data=payload)

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

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

Может ли это как-нибудь влиять на ответ сервера, не нарушает ли это структуру запроса?
Просто браузер всегда отправляет параметры выстроенные в определенной последовательности…
odnochlen
Очень сомневаюсь. Сервер на своей стороне загоняет их обратно в хеш-массив.
Чтобы выводить параметры в оригинальном порядке, можно попробовать передавать массив пар, или воспользоваться OrderedDict.
reclosedev
Seganapa
Может ли это как-нибудь влиять на ответ сервера, не нарушает ли это структуру запроса?
Зависит от приложения на сервере, но вообще не должно.

Можно отправить и упорядоченные значения. Для этого нужно в data передать список кортежей - (имя, значение)
payload = [('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')]
odnochlen
Небольшой совет: почему бы не оформить это так? Один вызов = один запрос.
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'),
])
Seganapa
А если это применимо к 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 принимает данные только в виде словаря… Как быть в таком случае?
reclosedev
odnochlen
…воспользоваться OrderedDict.
import json
from collections import OrderedDict
 
json_arg = json.dumps(OrderedDict([
                          ("name", "qwery"), 
                          ("password", "psa"), 
                          ("passwordhash", ""), 
                          ("autologin", False),
                      ]))
print json_arg
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB