Python 요청 라이브러리를 사용하여 게시 요청에서 쿠키를 보내는 방법은 무엇입니까?


94

요청 라이브러리 를 사용하여 게시 요청과 함께 쿠키를 보내 려고하는데 문서를 기반으로 쿠키를 실제로 설정하는 방법을 잘 모르겠습니다. 스크립트는 Wikipedia에서 사용하기위한 것이며 전송해야하는 쿠키는 다음과 같은 형식입니다.

enwiki_session=17ab96bd8ffbe8ca58a78657a918558e; path=/; domain=.wikipedia.com; HttpOnly

그러나 requests설명서 빠른 시작에서는이를 유일한 예로 제공합니다.

cookies = dict(cookies_are='working')

이 라이브러리를 사용하여 위와 같은 쿠키를 어떻게 인코딩 할 수 있습니까? 파이썬의 표준 쿠키 라이브러리로 만든 다음 POST 요청과 함께 보내야합니까?


2
귀하의 쿠키는 여러 a=b;쌍으로 구성됩니다 . 추측에 a따라 키와 b사전의 값으로 사용하십시오.
Thomas K

답변:


214

Requests의 최신 릴리스는 간단한 사전에서 CookieJars를 빌드합니다.

import requests

cookies = {'enwiki_session': '17ab96bd8ffbe8ca58a78657a918558'}

r = requests.post('http://wikipedia.org', cookies=cookies)

즐겨 :)


이 코드가 내 브라우저에 쿠키를 배치해야합니까? 나는 그것을 시도했지만 그것은 나를 위해 작동하지 않았습니다.
Chris Nielsen

15
@ChrisNielsen이 질문 / 답변은 브라우저와는 아무 상관이 없다
ThiefMaster

@ThiefMaster : 일반적으로 쿠키는 브라우저에 있습니다. 이 답변이 브라우저와 관련이없는 경우 어떤 관련이 있습니까?
Chris Nielsen

4
@ChrisNielsen :이 질문과 답변의 코드는 Python 요청에서 쿠키를 설정하는 것에 관한 것입니다. 요청은 브라우저 요청과 유사한 작업을 수행하지만 브라우저가 관련되지 않습니다.
DDay

118

이전 답변을 확장하기 위해 두 요청을 함께 연결하고 첫 번째 요청에서 두 번째 요청으로 반환 된 쿠키를 보내려면 (예 : 요청간에 세션을 유지 관리) 다음을 수행 할 수 있습니다.

import requests
r1 = requests.post('http://www.yourapp.com/login')
r2 = requests.post('http://www.yourapp.com/somepage',cookies=r1.cookies)

54
또한 requests.session이 정확한 것을 사용 하여 여러 세션에 걸쳐 쿠키를 저장하고 session대신 반환 된 객체 에서 호출 할 수 있습니다 .
TankorSmash

7
때때로 세션을 사용할 때도 이것을 활용해야했습니다. 일부 상황에서 세션이 Set-Cookie 헤더를 놓치는 것처럼 보입니다.
kervin 2013

1
@kervin 이것은 나에게도 일어났습니다. 세션 처리 해야 하기 때문에 요청의 버그처럼 보입니다 .
deweydb

3
@TankorSmash 내 쿠키가 사용 이월되지 않으며, 버그 확실히있다request.session
Tjorriemorrie

세션에서 (누락 된) 쿠키를 설정하는 가장 좋은 방법입니까? stackoverflow.com/a/17240616/143397
davidA

0

쿠키를 브라우저에 전달하려면 다시 보낼 헤더에 추가해야합니다. wsgi를 사용하는 경우 :

import requests
...


def application(environ, start_response):
    cookie = {'enwiki_session': '17ab96bd8ffbe8ca58a78657a918558'}
    response_headers = [('Content-type', 'text/plain')]
    response_headers.append(('Set-Cookie',cookie))
...

    return [bytes(post_env),response_headers]

인증 사용자 / 암호를 Python 스크립트에 전달하고 쿠키를 브라우저에 전달하여 Python wsgi 스크립트가 실행중인 동일한 도메인에서 호스팅되는 Bugzilla 및 TWiki로 성공적으로 인증 할 수 있습니다. 이렇게하면 동일한 브라우저에서 Bugzilla 및 TWiki 페이지를 열고 인증 할 수 있습니다. SuiteCRM에서 동일한 작업을 수행하려고하는데 SuiteCRM이 성공적으로 인증되었지만 Python 스크립트에서 얻은 세션 쿠키를 수락하는 데 문제가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.