2015-05-04 6 views
2

Я успешно вошел на сайт с помощью python и отправил POST-запрос с именем пользователя и паролем в качестве полезной нагрузки.Как выйти из запросов Сессия в Python

Когда я перехожу на тот же сайт в браузере, веб-сайт сообщает мне, что кто-то в настоящее время вошел в мою учетную запись (угадайте, кто).

Мой вопрос заключается в следующем: как мне выйти из сеанса запроса?

До сих пор я пытался очистки куки с помощью c.cookies.clear() после того, как найти этот вопрос на StackOverflow: Clear cookies from Requests Python

Я проверил, что куки будут созданы, а затем очищаются, но я по-прежнему работать в к при повторном использовании браузера.

Я проверил документацию Запросов и ряд предыдущих вопросов, но я не могу найти ответ.

Для справки, я наклеил общую версию приведенного ниже кода.

Также для вас информация, когда я выхожу из браузера, отправляется запрос GET. Это что-то мне нужно для симуляции? Я уже попробовал отправить его вместе с файлами cookie, но тот же результат. Это похоже на то, что должно быть простым. На данный момент я могу работать с ним, выйдя из браузера, но в долгосрочной перспективе это будет боль.

Ваша помощь приветствуется. Приветствия, smaug.

import requests 

payload = {'userid': 'my username value', 
      'passwd': 'my password value' 
} 

with requests.Session() a c: 
    c.post('http://www.examplewebsite.com/login.html', data = payload) 
    print 'cookies', requests.utils.dict_from_cookiejar(c.cookies) 
    c.cookies.clear() 
    print 'cookies', requests.utils.dict_from_cookiejar(c.cookies) 
+0

Поскольку это " общая "форма, я не уверен, что это опечатка, но вы действительно называете' c.cookies.clear' или 'c.cookies.clear()'. Первый просто извлекает метод на банке печенья. Последний фактически очищает банку. –

+0

Хорошо заметили sigmavirus24 - это была просто опечатка здесь в этой общей форме, я внесла поправки в код. Приветствия. – smaug

+0

Это то, чего я ожидал. Я попытаюсь воспроизвести это, потому что это звучит как ошибка (я - основной разработчик запросов) –

ответ

4

Если сайт имеет API, который требует от вас выйти из системы, requests не может знать, что. Вы должны явно указать запрос API .

В то время как requests имеет то, что называется Session, и многие веб-службы тоже делают это, сеанс на самом деле не является постоянным соединением между двумя компьютерами, такими как TCP-сокет.

  • Сессия каркаса веб-сервисов - это, по сути, способ передачи идентификатора взад и вперед клиенту в файлах cookie и сопоставление его с какой-либо записью базы данных или ее эквивалентом. Он по-прежнему видит только один запрос за раз, и единственный способ узнать, что вы сделали, если вы не сообщите об этом, - это некоторое время не видеть ваш идентификатор сеанса.
  • A requests сеанс - это просто место для хранения файлов cookie через несколько запросов, как это делает браузер, поэтому сеансы веб-сервисов будут работать так же, как в браузере.

Таким образом, очистка файлов cookie не делает ничего, что видно на сервере. Сервер не видит ничего, что вы делаете, за исключением отправляемых вами запросов.

+0

Спасибо за ваш быстрый и полезный ответ abarnert. – smaug

0

Как просто, как это кажется, мне удалось войти из сессии путем включения заявление сна с последующим запросом GET на странице выхода, то есть:

time.sleep(5) 
c.get('http://www.examplewebsite.com/logout.p') 
Смежные вопросы