Як використовувати Python для входу на веб-сторінку та отримання файлів cookie для подальшого використання?


146

Я хочу завантажити та проаналізувати веб-сторінку за допомогою python, але для доступу до неї мені потрібно встановити пару файлів cookie. Тому мені потрібно спочатку увійти через https на веб-сторінку. Момент входу включає в себе відправлення двох параметрів POST (ім’я користувача, пароль) до /login.php. Під час запиту на вхід я хочу отримати файли cookie з заголовка відповіді та зберегти їх, щоб я міг використовувати їх у запиті для завантаження веб-сторінки /data.php.

Як би я це зробив у python (бажано 2.6)? Якщо можливо, я хочу використовувати лише вбудовані модулі.

Відповіді:


147
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()це прямий html сторінки, яку ви хочете відкрити, і ви можете використовувати її openerдля перегляду будь-якої сторінки за допомогою сеансового файлу cookie.


1
Це безпечно? Хіба це не дозволить sniffers пакетів бачити паролі простого тексту? Чи було б використання Https більш безпечним?
Heartinpiece

2
@Heartinpiece Так, якщо сервер пропонує це, ви повинні використовувати HTTPS.
Харлі Холкомб

Дякую ... але уявіть, що ми увійшли та хотіли б розмістити sth ... як встановити cookie в цій темі для публікації даних?
MLSC

Настійно рекомендую використовувати бібліотеку запитів, якщо ви пишете великий код. (особистий досвід)
swapnil jariwala

157

Ось версія з використанням відмінної бібліотеки запитів :

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)

3
Є чи на 'action': 'login'самому справі необхідно в цьому прикладі, або це просто ще один додатковий параметр , який відправляється з проханням?
Тед

1
@Ted Ця частина абсолютно потрібна.
Sanghyun Lee

@ Ted Можливо, це потрібно в цьому конкретному прикладі. Це було не потрібно в моїй програмі.
Highstaker

Це найкраще, що я знаю. Можливо, вам доведеться робити дані відповідно до веб-сайту.
Jithin Pavithran
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.