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 % 사용 사례는 쿠키를받은 다음 해당 세션의 모든 후속 요청과 함께 쿠키를 보내야하는 것입니다. 위의 코드는이를 처리하고 투명하게 처리합니다.
CookieJar
인스턴스는 그때부터 모든 관련 도메인에서 나를 위해 그것을 처리 할 것입니다.
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"}}'
urllib3
하며 urllib3과 같은 연결 풀링을 지원하고 쿠키, 헤더를 유지합니다 Requests Session
. 아름다워!
cookielib를 사용하십시오 . 링크 된 문서 페이지는 끝에 예제를 제공합니다. 여기 에서 튜토리얼도 찾을 수 있습니다 .
cookievals
경우opener.addheaders.append(('Cookie', "; ".join('%s=%s' % (k,v) for k,v in cookievals.items())))
.