python requests增加cookie的方法

2016年4月19日 发表评论 阅读评论

一、有关cookie

我之前写过一篇博文《python pycurl模块》,在其中有提到pycurl 有将cookie保存在该文件中,并允许跟踪来源,其他请求会直接调用该cookie文件。这个适用于大多数的应用场景,不过有时候新的cookie内容并不会在响应头中记录到cookie文件中,比如session key之类的,其一般会在响应正文里。在直接后面的请求时,需要手动的加入到请求的cookie头信息里。本篇就结合requsts模块,了解下自定义cookie信息。

先科普下cookie的概念,Cookie它是在客户端访问Web服务器时,服务器在客户端硬盘上存放的信息,服务器可以根据Cookie来跟踪客户状态。具体见下图:

http-cookies

二、requests模块中cookie的使用

1、查看响应cookie

>>> url = 'https://www.baidu.com'
>>> r = requests.get(url)
>>> r.cookies.items()
[('BDORZ', '27315')]
>>> r.cookies.keys()
['BDORZ']
>>> r.cookies.values()
['27315']
>>> r.cookies['BDORZ']
'27315'

2、请求cookie

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

3、cookie的跨域访问

Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:

>>> jar = requests.cookies.RequestsCookieJar()
>>> jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
>>> jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
>>> url = 'http://httpbin.org/cookies'
>>> r = requests.get(url, cookies=jar)
>>> r.text
'{"cookies": {"tasty_cookie": "yum"}}'

思考一下,在访问http://httpbin.org/elsewhere 时返回的是什么?

三、requests模块自定义cookies实战

使用Cookie访问Web服务器的方式有两种:一种是写在header头部,另一种是插入Cookie参数。

1、使用header头部

import requests
url = 'http://200.200.0.7/Java/jviewer.jnlp?EXTRNIP=200.200.0.7&JNLPSTR=JViewer'
cookies = '''SessionCookie=shfLO755DJlWGV4AkCjSb4jnkBHPXe3J005; Language=ZH; Username=admin;'''
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Geck
o) Chrome/53.0.2785.143 Safari/537.36',
'Connection': 'keep-alive',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Cookie': cookies
       }
r = requests.get(url,headers=header)
print(r.text)

2、直接使用cookies参数

import requests
url = 'http://200.200.0.7/Java/jviewer.jnlp?EXTRNIP=200.200.0.7&JNLPSTR=JViewer'
cookie = '''SessionCookie=shfLO755DJlWGV4AkCjSb4jnkBHPXe3J005; Language=ZH; Username=admin;'''
r = requests.get(url,cookies=cookie)
print(r.text)

当然,这里还是支持使用headers的,cookies和headers地起用的方法是:r = requests.get(url,cookies=cookie ,headers=header) 。

更多内容可以参看requests模块官方文档




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.