2016-03-25 16 views
1

値を持つCookieを作成するWebページにアクセスしています。この値を変更して、同じWebサイトから別のページにアクセスします。Pythonリクエスト既存のCookieの値を変更する適切な方法は何ですか?

[74]: s.cookies.set('my_cookie','new_value') 
Out[74]: Cookie(version=0, name='my_cookie', value='new_value', port=None, port_specified=False, domain='/mydomain.lol', domain_specified=False, domain_initial_dot=False, path='/my_path', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False) 

が、お返しに、私は

を得た: sが最初に私が要求していくつかのことを試してみました s = requests.Session()

In [63]: s.cookies 
Out[63]: <RequestsCookieJar[Cookie(version=0, name='my_cookie', value='normal_value', port=None, port_specified=False, domain='my_domain.lol', domain_specified=False, domain_initial_dot=False, path='/my_path', path_specified=False, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]> 

で開かれたセッションで、次のとおりです。Pythonで 使用librequestsは、私は、次のクッキーを得ました

In [75]: s.cookies 
Out[75]: <RequestsCookieJar[Cookie(version=0, name='my_cookie', value='new_value', port=None, port_specified=False, domain='/mydomain.lol', domain_specified=False, domain_initial_dot=False, path='/my_path', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False), 
Cookie(version=0, name='my_cookie', value='new_value', port=None, port_specified=False, domain='mydomain.lol', domain_specified=False, domain_initial_dot=False, path='/my_path', path_specified=False, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]> 

ご覧のとおり、私の新しい価値は古いものを置き換えず、新しいクッキーを作成しました。同じ結果が得られました使用:

s.cookies['my_cookie'] = 'new_value' 

が、私はその後、私は私のクッキーを設定することができたときに限り多くのことを指定しようと、それが働いた:

In [67]: s.cookies.set('my_cookie','new_value',domain='mydomain.lol',path='/my_path') 
Out[67]: Cookie(version=0, name='my_cookie', value='new_value', port=None, port_specified=False, domain='mydomain.lol', domain_specified=True, domain_initial_dot=False, path='/my_path', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False) 

In [68]: s.cookies 
Out[68]: <RequestsCookieJar[Cookie(version=0, name='my_cookie', value='new_value', port=None, port_specified=False, domain='mydomain.lol', domain_specified=True, domain_initial_dot=False, path='/my_path', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]> 

したがって私の質問に、クッキーを設定するよりとても便利な方法はありませんあまりにも多くのことを指定することなく?たとえば、私の配列の最初のクッキーを取得することによって?あなたが最初にNoneに値を設定することができます

+0

コードのフォーマットは、その偉大に見えない、それを改善する方法はありますか? – aze

答えて

1

s.cookies.set('cookie', None) 
    s.cookies.set('cookie', "new_value") 

例:

In [5]: import requests 


In [6]: with requests.Session() as s: 
    ...:   s.get('http://httpbin.org/cookies/set?c1=foo&c2=bar') 
    ...:   r = s.get('http://httpbin.org/cookies') 
    ...:   print(r.text) 
    ...:   s.cookies.set('c1', None) 
    ...:   s.cookies.set('c1', "foobar") 
    ...:   print(s.cookies) 
    ...:   r = s.get('http://httpbin.org/cookies') 
    ...:   print(r.text) 
    ...:  
{ 
    "cookies": { 
    "c1": "foo", 
    "c2": "bar" 
    } 
} 

<<class 'requests.cookies.RequestsCookieJar'>[<Cookie c1=foobar for />, <Cookie c2=bar for httpbin.org/>]> 
{ 
    "cookies": { 
    "c1": "foobar", 
    "c2": "bar" 
    } 
} 
+0

これは、私がウェブページにアクセスしたときに以前に与えられた値に他の値を保持しますか? – aze

+0

@ user3714670、試しましたか? –

+0

残念なことに、この方法で前のクッキーをクリアする必要があります。 @PadraicCunninghamあなたはそれ以来、より良い方法を見つけましたか? – AlexG

関連する問題