python: urllib2 jak wysłać plik cookie za pomocą żądania urlopen
Próbuję użyć urllib2, aby otworzyć adres url i wysłać konkretny tekst cookie na serwer. Np. chcę otworzyć stronę rozwiązać problemy szachowe , za pomocą określonego pliku cookie, np. search=1. Jak to zrobić?
Staram się wykonać następujące czynności:
import urllib2
(need to add cookie to the request somehow)
urllib2.urlopen("http://chess-problems.prg")
Z góry dzięki
4 answers
Cookie to tylko kolejny nagłówek HTTP.
import urllib2
opener = urllib2.build_opener()
opener.addheaders.append(('Cookie', 'cookiename=cookievalue'))
f = opener.open("http://example.com/")
Zobacz urllib2 przykłady aby dowiedzieć się, jak dodać nagłówki HTTP do żądania.
Jest więcej sposobów na obsługę plików cookie. Niektóre moduły, takie jak cookielib , starają się zachowywać jak przeglądarka internetowa - pamiętaj, jakie pliki cookie otrzymałeś wcześniej i Automatycznie wysyłaj je ponownie w następujących żądaniach.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
2016-11-22 14:51:38
Może używając cookielib.CookieJar może Ci pomóc. Na przykład, gdy publikujesz na Stronie Zawierającej formularz:
import urllib2
import urllib
from cookielib import CookieJar
cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# input-type values from the html form
formdata = { "username" : username, "password": password, "form-id" : "1234" }
data_encoded = urllib.urlencode(formdata)
response = opener.open("https://page.com/login.php", data_encoded)
content = response.read()
EDIT:
Po komentarzu Piotra trochę rozbuduję. Z docs:
Klasa CookieJar przechowuje pliki cookie HTTP. Wyodrębnia pliki cookie z HTTP żądań i zwraca je w odpowiedziach HTTP. CookieJar automatycznie wygasają zawarte pliki cookie, gdy jest to konieczne. Podklasy to odpowiedzialny również za przechowywanie i pobieranie cookies z pliku lub baza danych.
Więc niezależnie od tego, jakie żądania wyślesz ze swoją instancją CookieJar
, wszystkie pliki cookie będą obsługiwane automatycznie. Trochę jak twoja przeglądarka:)
Mogę mówić tylko z własnego doświadczenia i moim 99% przypadkiem użycia plików cookie jest otrzymanie pliku cookie, a następnie wysłanie go ze wszystkimi kolejnymi żądaniami w tej sesji. Powyższy kod obsługuje tylko to i robi to przejrzyście.
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-03 19:38:26
Możesz rzucić okiem na doskonałą bibliotekę Pythona HTTP o nazwie Requests . Sprawia, że każde zadanie związane z HTTP jest nieco łatwiejsze niż urllib2. Z sekcji Cookies poradnika quickstart:
Aby wysłać własne pliki cookie na serwer, możesz użyć parametru cookies:
>>> cookies = dict(cookies_are='working')
>>> r = requests.get('http://httpbin.org/cookies', cookies=cookies)
>>> r.text
'{"cookies": {"cookies_are": "working"}}'
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
2012-07-02 20:07:32
Użyj cookielib . Podlinkowana strona dokumentu zawiera przykłady na końcu. Znajdziesz również tutorial tutaj.
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
2010-07-26 12:39:25