Próbuję użyć urllib2 do otwarcia adresu URL i wysłania określonego tekstu cookie do serwera. Np. Chcę otworzyć witrynę Rozwiązywanie problemów szachowych z określonym plikiem cookie, np. Search = 1. Jak mam to zrobić?
Próbuję 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ękuję
cookievals
, użyjopener.addheaders.append(('Cookie', "; ".join('%s=%s' % (k,v) for k,v in cookievals.items())))
.Może skorzystanie z cookielib.CookieJar może Ci pomóc. Na przykład podczas publikowania 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()
EDYTOWAĆ:
Po komentarzu Piotra trochę rozwinę. Z dokumentów:
Więc cokolwiek wyślesz do swojej
CookieJar
instancji, wszystkie pliki cookie będą obsługiwane automatycznie. Tak jak twoja przeglądarka :)Mogę mówić tylko z własnego doświadczenia, a moim przypadkiem używania plików cookie w 99% jest otrzymanie pliku cookie, a następnie wysłanie go przy wszystkich kolejnych żądaniach w tej sesji. Powyższy kod obsługuje właśnie to i robi to w sposób przejrzysty.
źródło
CookieJar
instancja będzie obsługiwała go za mnie od tej pory na wszystkich odpowiednich domenach.Możesz rzucić okiem na doskonałą bibliotekę HTTP Python o nazwie Requests . To sprawia, że każde zadanie związane z HTTP jest trochę łatwiejsze niż urllib2. W sekcji Pliki cookie przewodnika szybkiego startu:
>>> cookies = dict(cookies_are='working') >>> r = requests.get('http://httpbin.org/cookies', cookies=cookies) >>> r.text '{"cookies": {"cookies_are": "working"}}'
źródło
urllib3
, obsługuje pule połączeń, takie jak urllib3, i utrzymuje pliki cookie, nagłówki - patrzRequests Session
. To jest piękne!Użyj cookielib . Połączona strona dokumentu zawiera przykłady na końcu. Znajdziesz tu także tutorial tutaj .
źródło
Ta odpowiedź nie działa, ponieważ
urllib2
moduł został podzielony na kilka modułów w Pythonie 3. Musisz to zrobićfrom urllib import request opener = request.build_opener() opener.addheaders.append(('Cookie', 'cookiename=cookievalue')) f = opener.open("http://example.com/")
źródło