概述
Requests 是Python的第三方HTTP库。
可以用它来完成大部分HTTP协议行为, 例如: HEAD、GET、POST、PUT、PATCH、DELETE等。
也可以用它来完成大部分浏览器行为, 例如: 登陆、保持状态、登出、302跳转。
甚至可以用它来完成一些浏览器不允许的行为, 例如: 跨域、伪造、接口测试。
用requests来完成大部分HTTP协议行为
获取数据: GET
import requests
response = requests.get("https://www.baidu.com/s?wd=python")
# or
# response = requests.get("https://www.baidu.com/s", params={"wd": "python"})
print(u"请求的URL: ", response.request.url)
print(u"请求的参数(GET方法专属): ", response.request.path_url)
print(u"请求的Method: ", response.request.method)
print(u"请求的头: ", response.request.headers)
print(u"响应状态码: ", response.status_code)
print(u"响应头: ", response.headers)
print(u"响应内容: ", response.content)
print(u"请求所带的cookie和响应所返回的cookie集合: ", response.cookies)
print(u"总共耗时: ", response.elapsed)
requests 对象介绍(常用)
requests对象是这个库的最高级抽象, 它把 url_encoding、cookie、data、 headers、cookies 统统隐藏起来了.
通过这种最简单的方式帮我们把90%的代码工作都节省掉了, 就剩几个标准协议的名称供我们使用(封装到只外露几颗牙齿).
requests 对象常用方法
方法名 | 使用方法 | 说明 |
---|---|---|
get | requests.get() | 获取数据 |
post | requests.post() | 创建数据 |
put | requests.put() | 当数据存在时更新数据, 当数据不存在是创建数据 |
patch | requests.patch() | 更新数据 |
delete | requests.delete() | 删除数据 |
response 对象介绍(常用)
response对象是一个数据集合体, 这个对象肥的流油, 随便一掐都是数据,
这么叼的一个对象你怎么可以不用dir(response)来细细品尝一下呢?
response 对象常用方法
注意: 这些都是属性值, 不是方法, 不需要使用括号.
方法名 | 使用方法 | 数据类型 | 说明 |
---|---|---|---|
status_code | response.status_code | int | 返回状态 |
content | response.content | bytes | 返回内容 |
headers | response.headers | dict | 返回请求头 |
cookies | response.cookies | RequestsCookieJar Object | |
elapsed | response.elapsed | str | 请求到响应结束总耗时 |
reason | response.reason | str | 当status_code小于400时, 返回OK; 当大于等于400时, 返回错误信息 |
request | response.request | PreparedRequest Object | 发情请求所使用的数据对象 |
RequestsCookieJar 对象介绍(不常用)
RequestsCookieJar 对象是一个cookie集合体, 它包含多个cookie数据内容.
RequestsCookieJar 对象是对python 的 cookielib.CookieJar 库进行二次封装的一个对象.
由于这个对象不常用, 我就不多说了.
RequestsCookieJar 对象常用方法
方法名 | 使用方法 | 数据类型 | 说明 |
---|---|---|---|
get | response.cookies.get() | str | 获取一个cookie值 |
keys | response.cookies.keys() | list | 获取所有cookie的name |
values | response.cookies.values() | list | 获取所有cookie的name对应的value |
get_dict | response.cookies.get_dict() | dict | 获取一个完整的cookie键值字典 |
set_cookie | RequestsCookieJar().set_cookie() | 写入一个cookie |
PreparedRequest 对象介绍(不常用)
PreparedRequest 对象是针对get、post、put、patch、delete请求提供的参数
进行加工处理, 以确保目标服务器能正常识别这些数据.
由于这个对象不常用, 我就不多说了.
RequestsCookieJar 对象流程
步骤 | 对象 | 说明 |
---|---|---|
1 | PreparedRequest().prepare_method() | 将method字符串转换成大写, 并保存有效的 method. |
2 | PreparedRequest().prepare_url() | 检查url的 scheme(http|https)、host、uri 的合法性 和 保存有效的url. |
3 | PreparedRequest().prepare_headers() | 检查headers的合法性 和 保存有效的headers. |
4 | PreparedRequest().prepare_body() | 检查body的合法性 和 保存有效的body. |
5 | PreparedRequest().prepare_content_length() | 计算出body的数据长度(Content-Length) 和 保存该值. |
6 | PreparedRequest().prepare_auth() | 检查是否提供认证数据(auth; 账号密码) 和 保存该值. |
7 | PreparedRequest().prepare_cookies() | 检查cookie的合法性 和 保存cookie. |
Session 对象介绍(常用且重要)
Session 是一个线程安全的连接池, 它的作用是维护一个cookie集合, 帮你保留你所有请求痕迹(即所有服务器set-cookie的数据), 通过这种方式可以让你无间断地进行数据交互(而不是每个请求都需要单独认证一次!).
Session 的使用方法跟requests基本保持一致, 同时支持多线程并发请求, 因为它是线程安全的连接池(会话池).
from requests import sessions
session = sessions.Session()
response = session.get("https://www.baidu.com/s?wd=python")
# or
# requests = sessions.Session()
# response = requests.get("https://www.baidu.com/s", params={"wd": "python"})
print(u"请求的URL: ", response.request.url)
print(u"请求的参数(GET方法专属): ", response.request.path_url)
print(u"请求的Method: ", response.request.method)
print(u"请求的头: ", response.request.headers)
print(u"响应状态码: ", response.status_code)
print(u"响应头: ", response.headers)
print(u"响应内容: ", response.content)
print(u"请求所带的cookie和响应所返回的cookie集合: ", response.cookies)
print(u"总共耗时: ", response.elapsed)
网友评论