目录
Python requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。requests 模块比 urllib 模块更简洁。使用 requests 发送 HTTP 请求需要先导入 requests 模块,导入后就可以使用 requests 提供的方法向指定 URL 发送 HTTP 请求。
requests常用参数及响应内容
- requests常用参数
参数 | 说明 |
---|---|
method | 请求方式: get、post、put、delete 等 |
url | 接口请求地址 |
params | 请求数据中的链接参数,例如 get 的请求参数都是在 url 地址中 |
data | 请求数据 |
json | 接口常见的数据请求格式 |
headers | 请求头信息 |
cookie | 保存的用户登录信息,比如做一些充值功能,但是需要用户已经登录,需要 cookie 信息的请求信息传输 |
file | 接口中需上传的文件 |
timeout | 超时处理 proxys 设置代理 |
stream | 文件下载功能,通过请求方式下载文件 |
- requests响应内容
参数 | 说明 |
---|---|
r.encoding | 获取当前的编码 |
r.text | 返回响应的内容,unicode 类型数据 |
r.cookies | 返回cookie |
r.status_code | 返回 http 的状态码,比如 404 和 200(200 是 OK,404 是 Not Found) |
r.headers | 接口常见的数据请求格式 |
headers | 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None |
r.json() | 返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误) |
r.content | 返回响应的内容,以字节为单位 |
安装及导入requests模块
# 安装 requests 模块# pip install requests# 导入 requests 包import requests
HTTP 请求方法
方法 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
DELETE | 请求服务器删除指定的页面 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回复服务器收到的请求,主要用于测试或诊断 |
PATCH | 对 PUT 方法的补充,用来对已知资源进行局部更新 |
GET 请求
requests.get(url, params=None, **kwargs)
url: 获取页面的url链接
params: url中的额外参数,字典或字节流格式,可选
kwargs: 可选参数
url格式:http://ip:port/test?key1=value1&key2=value2
接口与参数之间用?链接,参数用key=value的形式表示,多个参数用&符号链接
传参数用字典类型:params={key1: value1, key2: value2}
注 : 如果GET请求参数中包含汉字,常会遇到编码错误
主要原因:http协议对URL参数的编码要求是ASCII字符集,汉字是UTF-8。在发送时要进行两次编码才能将汉字转为ASCII字节码,接收方同样也要进行两次解码,才能正确地还原汉字。
解决方法:python 内置库 urllib 提供了相应命令,可以将汉字转为ASCII编码。
编码: urllib.parse.urlencode(dic)
解码: urllib.parse.unquote(str)
get方法示例
import requestsurl = "http://192.168.1.30::3333/demo/"dic = {'key': keyword }headers = {'Authorization': 'Bearer 111'}param = urllib.parse.urlencode(dic) #包含汉字response = requests.get(url, params=param, headers=headers)print(response.text) # 响应内容的文本格式:response.textprint(response.content) # 响应内容的二进制格式: response.contentprint(response.json()) # 如果响应内容是json格式,可以用response.json()方法转换成 dict类型
POST 请求
POST 请求与GET请求不同的是, POST 请求参数是放在 request body 里发送的。
import requestsimport jsonurl = "http://192.168.1.30::3333/demo/"# from-data形式1payload = {'key1': 'value1','key2': 'value2'}files=[ ('image',('111.jpg',open('/D:/111.jpg','rb'),'image/jpeg'))]headers = {}response = requests.post(url, headers=headers, data=payload, files=files)# from-data形式2payload = {"key1": (None, 'value1'), "key2": (None, 'value2'), "Image": ('111.jpg', open('/D:/111.jpg', "rb"), "image/jpeg")}headers = {}response = requests.post(url, headers=headers, files=payload)# x-www-form-urlencoded形式1 简单键值对参数payload = 'key1=value1&key2=value2'headers = { 'Content-Type': 'application/x-www-form-urlencoded'}response = requests.post(url, headers=headers, data=payload)# x-www-form-urlencoded形式2 复合值参数dic = {"key1": 'value1', "key2": 'value2'}data = {"params": json.dumps(dic)}headers = { 'Content-Type': 'application/x-www-form-urlencoded'}response = requests.post(url, headers=headers, data=data)# json形式1data={"key1": 'value1', "key2": 'value2'}response = requests.post(url, json=data)# json形式2header={'content-type':'application/json'}data={"key1": 'value1', "key2": 'value2'}response = requests.post(url, data=json.dumps(data))print(response.text)
POST 请求还可以设置 cookie, header 等信息,具体可以参考postman操作方式。
其它请求消息, PUT与 POST类似, DELETE与GET类似。
content-type 参数说明
语法格式:type/subtype
type :数据资源的大类,如 text (文本类型), video(视频类型)等
subtype:资源子类,如,对于 text类,subtype 可能是 plain,csv 或者html等
参数 | 说明 |
---|---|
application/json | 传json数据 |
application/x-www-form-urlencoded | 提交表单默认的content-type设置, 对应form属性为 enctype |
multipart/form-data | 用于 form 上传文件 |
text/csv | 传csv |
text/html | 传网页 |
text/plain text/xml | 传文本 |
image/jpeg | 传图片 |
video/mp4 | 传MP4视频 |
HTTP状态码
HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。响应分为五类:
分类 | 描述 |
---|---|
1** | 信息响应,服务器收到请求,需要请求者继续执行操作 |
2** | 成功响应,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
状态码列表:
状态码 | 描述 |
---|---|
100 | 继续。客户端应继续其请求 |
101 | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
102 | 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行 |
200 | 请求成功。一般用于GET与POST请求 |
201 | 已创建。成功请求并创建了新的资源 |
202 | 已接受。已经接受请求,但未处理完成 |
203 | 非授权信息。请求成功,但返回的meta信息不在原始的服务器,而是一个副本 |
204 | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | 部分内容。服务器成功处理了部分GET请求 |
208 | 已经报告。一个DAV的绑定成员被前一个请求枚举,并且没有被再一次包括 |
226 | 服务器已经满足了请求所要的资源,并且响应是一个或者多个实例操作应用于当前实例的结果 |
300 | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 | 使用代理。所请求的资源必须通过代理访问 |
306 | 已经被废弃的HTTP状态码 |
307 | 临时重定向。与302类似。使用GET请求重定向 |
308 | 永久转移。这个请求和以后的请求都应该被另一个URI地址重新发送。307、308和302、301有相同的表现,但是不允许HTTP方法改变。例如,请求表单到一个永久转移的资源将会继续顺利地执行 |
400 | 错误请求。 服务器不理解请求的语法 |
401 | 未授权。 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应 |
402 | 该状态码是为了将来可能的需求而预留的 |
403 | 禁止。 服务器拒绝请求 |
404 | 未找到。 服务器找不到请求的网页 |
405 | 方法禁用。 禁用请求中指定的方法 |
406 | 不接受。无法使用请求的内容特性响应请求的网页 |
407 | 需要代理授权。此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理 |
408 | 请求超时。 服务器等候请求时发生超时 |
409 | 冲突。 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息 |
410 | 已删除。如果请求的资源已永久删除,服务器就会返回此响应 |
411 | 需要有效长度。服务器不接受不含有效内容长度标头字段的请求 |
412 | 未满足前提条件。服务器未满足请求者在请求中设置的其中一个前提条件 |
413 | 请求实体过大。 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力 |
414 | 请求的 URI 过长。请求的 URI(通常为网址)过长,服务器无法处理 |
415 | 不支持的媒体类型。请求的格式不受请求页面的支持 |
416 | 请求范围不符合要求。如果页面无法提供请求的范围,则服务器会返回此状态代码 |
417 | 未满足期望值。服务器未满足"期望"请求标头字段的要求 |
500 | 服务器内部错误。服务器遇到错误,无法完成请求 |
501 | 尚未实施。服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码 |
502 | 错误网关。服务器作为网关或代理,从上游服务器收到无效响应 |
503 | 服务不可用。服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态 |
504 | 网关超时。服务器作为网关或代理,但是没有及时从上游服务器收到请求 |
505 | HTTP 版本不受支持。服务器不支持请求中所用的 HTTP 协议版本 |
postman生成python请求代码
- 打开Postman软件,点击"+"号新建一个请求;
- 选择对应请求方式,url 地址,请求参数,点击 “Send” 发送请求;
- 在页面右侧找到> code snippet 图标,点击进去;
- 下滑选择"Python-Request",则会生成想要的示例代码。
来源地址:https://blog.csdn.net/GY_1202/article/details/131146902