Jak używać Pythona do logowania się na stronie internetowej i pobierania plików cookie do późniejszego użycia?

Chcę pobrać i przeanalizować stronę internetową za pomocą Pythona, ale aby uzyskać do niej dostęp, potrzebuję kilku plików cookie. Dlatego muszę najpierw zalogować się przez https do strony internetowej. Moment logowania polega na wysłaniu dwóch PARAMÓW postu (nazwa użytkownika, hasło) do /login.php. Podczas żądania logowania Chcę pobrać pliki cookie z nagłówka odpowiedzi i zapisać je, aby móc je wykorzystać w żądaniu pobrania strony internetowej / danych.php.

Jak mam to zrobić w Pythonie (najlepiej 2.6)? Jeśli to możliwe ja tylko chcesz korzystać z wbudowanych modułów.

Author: Harley Holcombe, 2008-10-10

2 answers

import urllib, urllib2, cookielib

username = 'myuser'
password = 'mypassword'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
opener.open('http://www.example.com/login.php', login_data)
resp = opener.open('http://www.example.com/hiddenpage.php')
print resp.read()

resp.read() jest prostym html strony, którą chcesz otworzyć, i możesz użyć opener, aby wyświetlić dowolną stronę za pomocą pliku cookie sesji.

 145
Author: Harley Holcombe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-19 00:40:23

Oto wersja korzystająca z doskonałej biblioteki requests:

from requests import session

payload = {
    'action': 'login',
    'username': USERNAME,
    'password': PASSWORD
}

with session() as c:
    c.post('http://example.com/login.php', data=payload)
    response = c.get('http://example.com/protected_page.php')
    print(response.headers)
    print(response.text)
 153
Author: Boden Garman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-16 08:59:16