requests 模块是 python 基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner
通过 pip install requests
安装 requests 库
导包:
import requests
http ,超文本传输协议,是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法,HTTP是一种基于"请求与响应"模式的、无状态的应用层协议。HTTP协议采用URL作为定位网络资源的的标识符
统一资源定位符是互联网上标准资源地址。互联网上的每一个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它
URL 的一般语法格式为:
protocol://host[:port]/path/[?query]#fragment http://www.itcast.cn/index.html?name=andy&age=18#link
组成 | 说明 |
---|---|
protocol | 通信协议,常用:http、https 等 |
host | 主机(域名) |
port | 端口号,可选,省略时候使用方案的默认端口,如:http的默认端口为80 |
path | 路径,由零或多个 '/' 符号隔开的字符串,一般用来表示主机上的一个目录或文件地址 |
query | 参数,以键值对的形式通过 & 来连接 |
fragment | 片段,# 后面内容常见于链接 锚点 |
url是通过HTTP协议存取资源的的Internet路径,一个URL对应一个数据资源
方法 | 说明 |
---|---|
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应消息报告,即获得资源的头部信息 |
POST | 请求向URL位置的资源后附加新的消息 |
PUT | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
PATCH | 请求局部更新URL位置的资源,即改变该处资源的部分内容 |
DELETE | 请求删除URL位置存储的资源 |
GET
,HEAD
是从服务器获取信息到本地,PUT
,POST
,PATCH
,DELETE
是从本地向服务器提交信息。通过URL和命令管理资源,操作独立无状态,网络通道及服务器成了黑盒子
方法 | 说明 |
---|---|
requsts.requst() | 构造一个请求,最基本的方法,是下面方法的支撑 |
requsts.get() | 获取网页,对应HTTP中的GET方法 |
requsts.post() | 向网页提交信息,对应HTTP中的POST方法 |
requsts.head() | 获取html网页的头信息,对应HTTP中的HEAD方法 |
requsts.put() | 向html提交put方法,对应HTTP中的PUT方法 |
requsts.patch() | 向html网页提交局部请求修改的的请求,对应HTTP中的PATCH方法 |
requsts.delete() | 向html提交删除请求,对应HTTP中的DELETE方法 |
主要使用 get 和 post 方法
resp = requests.get(url="http://www.baidu.com") print(resp)
resp 是一个Response对象,一个包含服务器资源的对象
参数 | 类型 | 作用 |
---|---|---|
params | 字典 | url为基准的url地址,不包含查询参数;该方法会自动对params字典编码,然后和url拼接 |
url | 字符串 | requests 发起请求的地址 |
headers | 字典 | 请求头,发送请求的过程中请求的附加内容携带着一些必要的参数 |
cookies | 字典 | 携带登录状态 |
proxies | 字典 | 用来设置代理 ip 服务器 |
timeout | 整型 | 用于设定超时时间, 单位为秒 |
word = input("please input a word") url = "https://fanyi.baidu.com/sug" data = { "kw": word, } headers = { 'User-Agent': "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 96.0.4664 .93 Safari / 537.36", } resp = requests.get(url=url, data=data, headers=headers) print(resp.json())
参数 | 类型 | 作用 |
---|---|---|
data | 字典 | 作为向服务器提供或提交资源时提交,主要用于 post 请求 |
json | 字典 | json格式的数据, json合适在相关的html |
注意:
- data 和 params 的区别是: data提交的数据并不放在url链接里, 而是放在url链接对应位置的地方作为数据来存储
- data 和 json 的作用类似,适用方法相同
- get 里面的参数大部分也适用
属性 | 说明 |
---|---|
resp.status_code | http请求的返回状态,若为200则表示请求成功。 |
resp.raise_for_status() | 该语句在方法内部判断resp.status_code 是否等于200,如果不等于,则抛出异常 |
resp.text | http响应内容的字符串形式,即返回的页面内容 |
resp.encoding | 从http header 中猜测的相应内容编码方式 |
resp.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
resp.content | http响应内容的二进制形式 |
resp.json() | 得到对应的 json 格式的数据,类似于字典 |
url = "http://www.baidu.com" headers = { 'User-Agent': "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 96.0.4664 .93 Safari / 537.36", } resp = requests.head(url=url) print(resp.headers)
resp.headers 方法反馈头部内容,很少网络流量获得概要信息
python接口自动化
其语法和 post 请求的语法类似
put 和 post 区别: