Nice programing

python : urllib2 urlopen 요청으로 쿠키를 보내는 방법

nicepro 2020. 10. 4. 13:21
반응형

python : urllib2 urlopen 요청으로 쿠키를 보내는 방법


urllib2를 사용하여 URL을 열고 특정 쿠키 텍스트를 서버로 보내려고합니다. 예 : 특정 쿠키 (예 : search = 1)를 사용하여 체스 문제 해결 사이트를 열고 싶습니다 . 어떻게하나요?

다음을 시도하고 있습니다.

import urllib2
(need to add cookie to the request somehow)
urllib2.urlopen("http://chess-problems.prg")

미리 감사드립니다


쿠키는 또 다른 HTTP 헤더입니다.

import urllib2
opener = urllib2.build_opener()
opener.addheaders.append(('Cookie', 'cookiename=cookievalue'))
f = opener.open("http://example.com/")

요청에 HTTP 헤더를 추가하는 다른 방법 urllib2 예제참조하십시오 .

쿠키를 처리하는 방법에는 여러 가지가 있습니다. cookielib 와 같은 일부 모듈은 웹 브라우저처럼 작동하려고합니다. 이전에받은 쿠키를 기억하고 다음 요청에서 자동으로 다시 보냅니다.


아마도 cookielib.CookieJar사용 하면 도움이 될 수 있습니다. 예를 들어 양식이 포함 된 페이지에 게시하는 경우 :

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()

편집하다:

Piotr의 코멘트 후에 조금 더 자세히 설명하겠습니다. 문서에서 :

CookieJar 클래스는 HTTP 쿠키를 저장합니다. HTTP 요청에서 쿠키를 추출하여 HTTP 응답으로 반환합니다. CookieJar 인스턴스는 필요할 때 포함 된 쿠키가 자동으로 만료됩니다. 서브 클래스는 또한 파일 또는 데이터베이스에서 쿠키를 저장하고 검색하는 역할을합니다.

따라서 CookieJar인스턴스에 대한 요청이 무엇이든 모든 쿠키는 자동으로 처리됩니다. 브라우저가하는 것처럼 :)

나는 내 경험을 통해서만 말할 수 있으며 쿠키에 대한 99 % 사용 사례는 쿠키를받은 다음 해당 세션의 모든 후속 요청과 함께 쿠키를 보내야하는 것입니다. 위의 코드는이를 처리하고 투명하게 처리합니다.


Requests 라는 훌륭한 HTTP Python 라이브러리를 살펴볼 수 있습니다 . HTTP와 관련된 모든 작업을 urllib2보다 조금 더 쉽게 만듭니다. 에서 쿠키의 빠른 시작 가이드 섹션 :

자신의 쿠키를 서버로 보내려면 cookies 매개 변수를 사용할 수 있습니다.

>>> cookies = dict(cookies_are='working')

>>> r = requests.get('http://httpbin.org/cookies', cookies=cookies)
>>> r.text
'{"cookies": {"cookies_are": "working"}}'

cookielib를 사용하십시오 . 링크 된 문서 페이지는 끝에 예제를 제공합니다. 여기 에서 튜토리얼도 찾을 수 있습니다 .


이 답변은 urllib2모듈이 Python 3의 여러 모듈로 분할되었으므로 작동 하지 않습니다.

from urllib import request
opener = request.build_opener()
opener.addheaders.append(('Cookie', 'cookiename=cookievalue'))
f = opener.open("http://example.com/")

참고 URL : https://stackoverflow.com/questions/3334809/python-urllib2-how-to-send-cookie-with-urlopen-request

반응형