Requests 是一个 Python 的一个第三方库,通过发送 HTTP 请求获取响应数据,一般应用于编写网络爬虫和接口测试等。
相比 urllib 库,它语法简单,更容易上手。
官方中文文档地址:Requests: 让 HTTP 服务人类
离线文档下载地址:Requests document download
安装 Reuqests
pip install requests
HTTP 简介
在使用 requests 模拟发送网络请求之前,先来简单学习一下HTTP和常见的请求方式。
什么是 HTTP
HTTP(HyperText Transfer Protocol ,超文本传输协议)是一个简单的请求/响应协议。即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。
HTTP工作原理
1.客户端与服务器端建立连接
2.客户端向服务器端发起请求
3.服务器接受请求,并根据请求返回相应的内容
4.客服端与服务器端连接关闭
客户端和服务器端之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭,下次请求再重新建立连接。这样做的好处就是让服务器不会处于一个一直等待的状态,及时释放连接可极大提高服务器的执行效率。
HTTP是一种无状态协议,意思就是服务器不保留与客户端连接时的任何状态。这减轻了服务器的记忆负担,从而保持较快的响应速度。
HTTP的9种请求方法
每种请求方式规定了客户端和服务器端之间不同的信息交换方式。
请求方法 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体。 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
PUT | 从客户端向服务器传送数据取代指定的文档的内容。 |
PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 |
DELETE | 请求服务器删除指定的页面 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器 |
请求方法GET和POST的区别:
- GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中
- GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制
- GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
- GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码
HTTP状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
分类 | 分类描述 |
---|---|
1** | 指示信息--服务器收到请求,需要请求者继续执行操作 |
2** | 成功--操作被成功接收并处理 |
3** | 重定向--需要进一步的操作以完成请求 |
4** | 客户端错误--请求包含语法错误或无法完成请求 |
5** | 服务器错误--服务器在处理请求的过程中发生了错误 |
常见的状态码:
状态码 | 含义 |
---|---|
200 OK | 客户端请求成功 |
400 Bad Request | 客户端请求有语法错误,不能被服务器理解 |
401 Unauthorized | 请求未经授权,这个状态码必须和 WWW-Authenticate 报头域一起使用 |
403 Forbidden | 服务器收到请求,但是拒绝服务 |
404 Not Found | 请求资源不存在,eg:输入了错误的URL |
500 Internal Server Error | 服务器发生不可预期的错误 |
503 Server Unavailable | 服务器当掐你不能处理客户端的请求,一段时间后可能恢复 |
本节参考链接:
https://www.cnblogs.com/qdhxhz/p/8468913.html
https://blog.csdn.net/qq_40100414/article/details/120122782
如果你想学习关于 HTTP 的更多知识,可以关注公众号[愿泽君],输入"python requests"获取高清电子书和本文 markdown 笔记。
requests 快速上手
requests 发起请求的步骤
使用 requests 的流程大致可以分为以下三步:
requests 发起请求的两种方式
使用 requests 发起请求有两种方式,以发起post请求为例:
import requests
# 方式一:
r = requests.request("post","https://www.baidu.com")
print(r.text)
# 方式二:
r = requests.post("https://www.baidu.com")
print(r.text)
requests.request(method, url, ...)
的 request 是 requests 封装好根据 method 传参的不同而调用对应的请求方法。method 参数的值可以是 get/post/put/delete/head/patch/options 等,对应我们上一节的 HTTP 请求方法。上面的示例代码中方式一和方式二达到的效果都是一样的,但是推荐使用方式一,因为在后面的接口自动化测试中便于参数化,如下:
import requests
method = "get"
url = "https://www.baidu.com"
r = requests.request(method=method, url=url)
print(r.text)
请求参数
requests 发起请求时,支持传递的参数列表:
- method:请求的类型,格式为字符串。值可以是 get\post\put\delete\files\head\patch\options
- url:请求的接口地址,格式为字符