requests的高级用法(1)

1.会话对象

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

>>> s = requests.Session()
>>> s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')

>>> 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'})

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 "", line 1, in 
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)

 

你可能感兴趣的:(requests的高级用法(1))