requests教程

概述

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)

你可能感兴趣的:(requests教程)