Requests库使用

 

Requests

  进行接口测试需要发送 HTTP 请求,Python 最基础的 HTTP 库有 Urllib、Httplib2、Requests、Treq 等,这里
推荐使用 Requests 库来进行接口测试。
  Requests 基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们
大量的工作,完全满足 HTTP 测试需求。目前很多 Python 爬虫也使用 Requests 库。
 

官方文档摘要

Requests 口号为:“让 HTTP 服务人类”
Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。
 
用户见证
Twitter、Spotify、Microsoft、Amazon、Lyft、BuzzFeed、Reddit、NSA、女王殿下的政府、Amazon、Google、
Twilio、Mozilla、Heroku、PayPal、NPR、Obama for America、Transifex、Native Instruments、Washington
Post、Twitter、SoundCloud、Kippt、Readability、以及若干不愿公开身份的联邦政府机构都在内部使用。
 
功能特性
• Keep-Alive & 连接池
• 国际化域名和 URL
• 带持久 Cookie 的会话
• 浏览器式的 SSL 认证
• 自动内容解码
• 基本/摘要式的身份认证
• 优雅的 key/value Cookie
• 自动解压
• Unicode 响应体
• HTTP(S) 代理支持
• 文件分块上传
• 流下载
• 连接超时
• 分块请求
• 支持 .netrc(用户配置脚本文件)
 

Requests 安装

使用 pip 安装命令如下:
pip install requests
安装检测
打开 cmd 窗口,输入 python 然后导入 requests 如果安装成功没有任何提示
import requests
如果提示如下内容则说明安装失败
ImportError: No module named 'requests'

 

Requests 基础应用

发送不同类型 HTTP 请求

requests 库内置了不同的方法来发送不同类型的 http 请求,用法如下所示:
 
 
 1 # 地址
 2 base_url='http://httpbin.org'
 3 h_url='http://121.4.144.158'
 4 
 5 
 6 # 发送一个get请求
 7 rg=requests.get(base_url,'/get')
 8 # 打印返回状态码
 9 print(rg.status_code)
10 
11 
12 # 发送一个post请求
13 rp=requests.post(base_url+'/post')
14 print(rp.status_code)

 

 

参数传递

传递 URL 参数
一般在 GET 请求中我们使用查询字符串(query string)来进行参数传递,在 requests 库中使用方法如下:
1 # 参数设置
2 param_data={'user':'xiaomi','password':'666'}
3 
4 # 传参
5 rg=requests.get(base_url+'/get',params=param_data)
6 
7 print(rg.url)
8 print(rg.status_code)

 

 

 

传递 body 参数

在 Post 请求中,一般参数都在请求体(Request body)中传递,在 Requests 中用法如下:
1 # body传参
2 form_data = {'user': 'huang', 'passwd': '8888'}
3 
4 rp=requests.post(base_url+'/post',data=form_data)
5 
6 print(rp.text)

 

 

请求头定制

如果你想为请求添加 HTTP 头部,只要简单地传递一个 dict (字典)给 headers 参数就可以了。用法如下: 
1 # 请求头定制化
2 form_data = {'user': 'huang', 'passwd': '8888'}
3 header={'user-agent':'Mozilla/5.0'}
4 
5 r=requests.post(base_url+'/post',data=form_data,headers=header)
6 print(r.text)

结果如下:

 

Tips:很多爬虫程序都会定制 headers 来避免被封,如下面爬取知乎页面元素就设置了请求头。
 
 
1 headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/66.0.3359.181 Safari/537.36'}
2 r = requests.get("https://www.zhihu.com/explore",headers=headers)
3 print(r.text)

 

响应内容

当请求发送成功之后,我们可以获取响应内容。如响应状态码,响应头信息、响应体内容。
 1 form_data = {'user': 'huang', 'passwd': '8888'}
 2 header={'user-agent':'Mozilla/5.0'}
 3 r=requests.post(base_url+'/post',data=form_data,headers=header)
 4 #获取响应状态码
 5 print(r.status_code)
 6 #获取响应头信息
 7 print(r.headers)
 8 #获取响应内容
 9 print(r.text)
10 #将响应的内容以 Json 格式返回
11 print(r.json())

 

方法 描述
r.status_code 响应状态码
r.content 字节方式的响应体,会自动为你解码gzip和deflate压缩
r.headers 以字典对象储存服务器响应头,若键不存在返回None
r.json() 响应内容json格式返回
r.url 获取请求的url
r.encoding 编码格式
r.cookies 获取cookie
r.raw 获取响应原始数据
r.text 响应内容以字符串方式,自动根据响应头的字符编码进行
r.raise_for_status() 失败请求(非200响应)抛出异常

 

 

 

Requests 进阶应用

Cookie 设置
设置 cookie
通过 cookies 参数可以设置 Cookie
cookie={'user':'huang'}
r=requests.get(base_url+'/cookies',cookies=cookie)
print(r.text)

运行结果如下:

 

获取 cookie
请求百度首页,然后获取 cookie,实现如下: 
# 获取 cookie
r=requests.get('http://www.baidu.com')
print(type(r.cookies))
print(r.cookies)
for key,value in r.cookies.items():
print(key + ':' + value)
运行结果: 
调用了 cookies 属性即可成功得到了 Cookies,可以发现它是一个 RequestCookieJar 类型,然后我们用 items() 方法将其转化为元组组成的列表,遍历输出每一个 Cookie 的名和值,实现 Cookies 的遍历解析。 
 
 
超时
你可以让 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。防止某些请求没有响应而一直处于等待状态。
下面案例故意设置一个很小的超时时间,为了来看一下超时后的一个响应处理,但是实际测试过程中不要设置这短。
posted @ 2022-04-16 10:35  钟鼎山林  阅读(70)  评论(0编辑  收藏  举报