requests的高级用法(1)

1.会话对象

1)会话对象能够跨请求保持某些参数,会在同一个session实例发出的所有请求之间保持cookie;(Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一服务器,是在客户端保持状态的方案;session是保存在服务器上的信息。)

>>> s = requests.Session()
>>> s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
<Response [200]>
>>> r = s.get("http://httpbin.org/cookies")
>>> print(r.text)
{
  "cookies": {
    "sessioncookie": "123456789"
  }
}

2)会话也可以用来为请求方法提供缺省数据,如下

>>> s = requests.Session()
>>> s.auth = ('user','pass')
>>> s.headers.update({'x-test': 'true'})
>>> #both 'x-test' and 'x-test2' are sent
...
>>> s.get('http://httpbin.org/headers', headers = {'x-test2': 'true'})
<Response [200]>

3)需要注意即使使用了会话,方法级别的参数也不会被跨请求保持,

>>> s = requests.Session()
>>> r = s.get('http://httpbin.org/cookies', cookies = {'from-my': 'browser'})
>>> print(r.text)
{
  "cookies": {
    "from-my": "browser"
  }
}

>>> #就算使用了会话,方法级别的参数也不会别跨请求保持(个人理解:浏览器第一次发送请求时,会生成一个hash table和sessionID
...
>>> #跨请求--第二次请求,方法级别的参数不会被保持
...
>>> r = s.get('http://httpbin.org/cookies')
>>> print(r.text)
{
  "cookies": {}
}

4)从字典参数中移除一个值

若想省略字典参数中一些会话层的键,在方法层的参数中将该键值置为None,键值便会被自动略掉。

2.请求与响应对象

1)requests.get()的调用

(1)是在构建request对象,该对象将被发送到某个服务器请求或查询一些资源;

(2)ruquests一旦得到一个从服务器返回的响应后,就会生成一个response对象,该对象包含服务器返回的所有信息以及request对象的内容

>>> r = requests.get('http://httpbin.org/cookies')
>>> r.headers #服务器返回给我们的响应头部信息
{'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Date': 'Mon, 19 Nov 2018 03:47:28 GMT', 'Content-Type': 'application/json', 'Content-Length': '20', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'Via': '1.1 vegur'}
>>> r.requests.headers
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Response' object has no attribute 'requests'
>>> r.request.headers #发送到服务器的请求头部信息
{'User-Agent': 'python-requests/2.19.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
>>>

3.准备的请求(个人也不太理解,暂时附上对这段代码的注释)

from requests import Request,Session

s = Session()  #创建一个session对象
payload = {'key1': 'value1', 'key2': 'value2'}
headers = {'user-agent': 'my-app/0.0.1'}
#发送get请求
req = Request('GET', 'https://www.csdn.net/',
    data=payload,
    headers=headers
)
#创建一个请求准备对象
prepped = s.prepare_request(req)

# do something with prepped.body
# do something with prepped.headers

#再次向服务器发送请求
resp = s.send(prepped)
#打印返回码
print(resp.status_code)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值