Cookies与会话对象

第一次访问页面后,Server可将Cookie信息加入HTTP Header返回给浏览器,浏览器会自动将这些信息保存在本地;
当再次访问相同域名时,浏览器将对应Cookie信息随请求一起发送,Server端可读取这些信息进行处理。
Cookie可设置过期时间,到期后由浏览器自动删除;


当我们要返回页面时,首先输出如下:

  1. print "Content-type: text/plain\n" 
print "Content-type: text/plain\n"


它其实是一个HTTP Header, 连续碰到两个换行表示HTTP Header部分结束,剩余部分将被做为数据处理;
包含了Cookie后输出大致如下:

  1. print "Content-Type: text/html" 
  2. print "Set-Cookie: session=12345" 
  3. print   # 多加一个换行表示HTTP Header部分结束 
print "Content-Type: text/html"
print "Set-Cookie: session=12345"
print   # 多加一个换行表示HTTP Header部分结束


代码:

setcookie.py

  1. #!/usr/bin/env python 
  2.  
  3. import Cookie 
  4. import datetime 
  5. import random 
  6.  
  7. expiration = datetime.datetime.now() + datetime.timedelta(days=30
  8. cookie = Cookie.SimpleCookie() 
  9. cookie["session"] = random.randint(0,1000000000
  10. cookie["session"]["domain"] = "localhost" 
  11. cookie["session"]["path"] = "/" 
  12. cookie["session"]["expires"] = \ 
  13.   expiration.strftime("%a, %d-%b-%Y %H:%M:%S PST"
  14.  
  15. print "Content-type: text/plain" 
  16. print cookie.output() 
  17. print 
  18. print "Cookie set with: " + cookie.output() 
#!/usr/bin/env python

import Cookie
import datetime
import random

expiration = datetime.datetime.now() + datetime.timedelta(days=30)
cookie = Cookie.SimpleCookie()
cookie["session"] = random.randint(0,1000000000)
cookie["session"]["domain"] = "localhost"
cookie["session"]["path"] = "/"
cookie["session"]["expires"] = \
  expiration.strftime("%a, %d-%b-%Y %H:%M:%S PST")

print "Content-type: text/plain"
print cookie.output()
print
print "Cookie set with: " + cookie.output()

getcookie.py
  1. #!/usr/bin/env python 
  2.  
  3. import Cookie 
  4. import os 
  5.  
  6. print "Content-type: text/plain\n" 
  7.  
  8. try
  9.     cookie = Cookie.SimpleCookie(os.environ["HTTP_COOKIE"]) 
  10.     print "session = " + cookie["session"].value 
  11. except (Cookie.CookieError, KeyError): 
  12.     print "session cookie not set!" 
 
六、Cookies与会话对象

如果某个响应中包含一些Cookie,你可以快速访问它们:

Code example:
1
2
3
4
5
import requests
r = requests.get('http://www.google.com.hk/')
print(r.cookies['NID'])
print(tuple(r.cookies))

要想发送你的cookies到服务器,可以使用 cookies 参数:

Code example:
1
2
3
4
5
6
7
import requests
url = 'http://httpbin.org/cookies'
cookies = {'testCookies_1': 'Hello_Python3', 'testCookies_2': 'Hello_Requests'}
# 在Cookie Version 0中规定空格、方括号、圆括号、等于号、逗号、双引号、斜杠、问号、@,冒号,分号等特殊符号都不能作为Cookie的内容。
r = requests.get(url, cookies=cookies)
print(r.json())

会话对象让你能够跨请求保持某些参数,最方便的是在同一个Session实例发出的所有请求之间保持cookies,且这些都是自动处理的,甚是方便。
下面就来一个真正的实例,如下是快盘签到脚本:

Code example:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
           'Accept-Encoding': 'gzip, deflate, compress',
           'Accept-Language': 'en-us;q=0.5,en;q=0.3',
           'Cache-Control': 'max-age=0',
           'Connection': 'keep-alive',
           'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
s = requests.Session()
s.headers.update(headers)
# s.auth = ('superuser', '123')
s.get('https://www.kuaipan.cn/account_login.htm')
_URL = 'http://www.kuaipan.cn/index.php'
s.post(_URL, params={'ac':'account', 'op':'login'},
       data={'username':'****@foxmail.com', 'userpwd':'********', 'isajax':'yes'})
r = s.get(_URL, params={'ac':'zone', 'op':'taskdetail'})
print(r.json())
s.get(_URL, params={'ac':'common', 'op':'usersign'})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值