Requests实践详解
Requests是什么
Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库 如果你看过上篇文章关于urllib库的使用,你会发现,其实urllib还是非常不方便的,而Requests它会比urllib更加方便,可以节约我们大量的工作。(用了requests之后,你基本都不愿意用urllib了)一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库。 默认安装好python之后,是没有安装requests模块的,需要单独通过pip安装。
Requests安装
安装方式很简单,直接使用命令安装即可,如下:
pip install requests
也可直接在PyCharm工具中安装,相信大家都已轻车熟路,就忽略了。
Requests详细使用
1.各种请求方式
requests里提供了各种请求方式,比如:get,post,delete,put,具体如下所示:
import requests
requests.post("http://httpbin.org/post")
requests.put("http://httpbin.org/put")
requests.delete("http://httpbin.org/delete")
requests.get("http://httpbin.org/get")
2.公共方法
在使用requests时,无论你使用的请求方法是get也好,post也罢,他们都会给你返回一个响应的对象,而针对这个对象有一些特定的方法,能够让你进一步解析响应从而得到你想要的数据,如下:
response.json() # 以json的形式返回响应内容,对象格式为dict
response.content # 以二进制的形式返回响应内容,对象格式为bytes
response.text # 以字符串的形式返回响应内容,对象格式为str
response.url # 返回请求的url
response.status_code # 返回本次请求的状态码
response.reason # 返回状态码对应的原因
response.headers # 返回响应头
response.cookies # 返回cookice信息
response.raw # 返回原始响应体
response.encoding # 返回编码格式
我们了解了基本的请求方式以及响应对象,接下来我们就来以实例再来实践一番,加深印象以及更好的理解。
3.不带参数的get请求
import requests
# 构建一个get请求的对象
response = requests.get('http://www.baidu.com')
# 以字符串的形式返回响应的内容
print response.text
4.带参数的get请求
import requests # 基本get请求
r = requests.get(url='http://www.baidu.com') # 最基本的GET请求
print(r.status_code) # 获取返回状态
r = requests.get(url='http://www.baidu.com/s', params={'wd': '温一壶清酒 博客园'}) # 带参数的GET请求
print(r.url)
print(r.text) # 打印解码后的返回数据
我们也可以把参数放到一个变量中传递,如下:
import requests
params = {
'wd': '温一壶清酒 博客园'
}
# 基本get请求
r = requests.get(url='http://www.baidu.com') # 最基本的GET请求
print(r.status_code) # 获取返回状态
r = requests.get(url='http://www.baidu.com/s', params=params) # 带参数的GET请求
print(r.url)
print(r.text) # 打印解码后的返回数据
5.普通登录post请求
以普通登录方式为例,如下所示:
import requests # 普通登录
headers = {'Authorization': ''}
r = requests.post(url='XXXX', data={
'username': '', 'password': ''},headers=headers)
print(r.url)
print(r.status_code) # 获取返回状态
print(r.text) # 打印解码后的返回数据

6.basic auth登录post请求
方式一:
import requests
from requests.auth import HTTPBasicAuth # basic auth方式登录
# 方法一
a = HTTPBasicAuth('', '')
r = requests.post(url="XXXXXXX", data={'grant_type': '', 'scope': ''},auth=a) print(r.status_code) # 获取返回状态
print(r.text) # 打印解码后的返回数据
方式二:
import requests # basic auth方式登录 # 方法二 (只加载requests模块就行)
r = requests.post(url='XXXXXXXX', data={'grant_type': '', 'scope': ''},auth=('', ''))
print(r.status_code) # 获取返回状态
print(r.text) # 打印解码后的返回数据
7.设置请求头
如普通登录post请求方式所示,就添加了headers参数,不同的应用场景,headers里面的参数也就各不同。示例参见第五点即可。
8.证书验证
有些网址访问时,需要校验证书,比如12306官网,我们先来简单访问下,如下:
import requests # 证书验证
r = requests.get("https://www.12306.cn")
print(r.status_code)
print(r.text)
运行代码,报错如下:

在网上寻找一番,可以得到答案,如下所示:
import requests
import urllib3 # 证书验证
urllib3.disable_warnings()
r = requests.get("https://www.12306.cn", verify=False)
print(r.status_code)
print(r.text)
再次访问,就可以正常进入官网了。
9.json响应数据格式调整
比如下登录操作时,返回的json数据,在控制台中是一行展示,如果数据过多,则不便于查看,如下所示:

使用如下代码实现:
import requests
import json def better_output(json_str):
return json.dumps(json.loads(json_str), indent=4) url = "XXXXXX"
headers = {'Authorization': ''}
request_param = {
'username': '', 'password': ''
}
response = requests.post(url, data=request_param, headers=headers)
print(better_output(response.text))
再次运行代码,查看json数据,如下所示,这样就很方便查看了。

10.动态传参
我们实现登录之后,继续做下一步操作,那就需要传递token了,不然会报401错误,没有权限。接下来就来看下如何实现:
import requests
import json host = '' # json数据转换格式,ensure_ascii显示为中文
def better_output(json_str):
return json.dumps(json.loads(json_str), indent=4, ensure_ascii=False) def login():
# 普通登录
headers = {'Authorization': ''}
data = {
'username': '',
'password': ''
}
url = host + '/token'
r = requests.post(url=url, data=data, headers=headers, verify=False) # 设置全局变量
global token
token = (r.json()["access_token"]) print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print("+++登录接口响应的状态码为:" + str(r.status_code)) # 获取返回状态
print("+++登录接口响应的数据为:" + better_output(r.text)) # 打印解码后的返回数据
print("+++获取到的token值为:" + token)
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") login()
将token设置成全局变量,便可在各接口间传递,token已经获取到,将token传到headers中即可,如下:
headers = {
'Content-Type': 'application/json;charset=utf-8',
# token传参
'Authorization': 'Bearer ' + token
}
11.json入参嵌套
方式一:
import requests,json url = "http://xxx"
headers = {"Content-Type":"application/json","Authorization":"Bearer token值"}
data1 = {"key1":"value1","key2":"value2"}
data = {"params":data1} r = request.post(url = url,data = json.dumps(data),headers = headers)
方式二:
import requests,json url = "http://xxx"
headers = {"Content-Type":"application/json","Authorization":"Bearer token值"}
data1 = {"key1":"value1","key2":"value2"}
data = {"params":data1} r = request.post(url = url,json = data,headers = headers)
Requests综合实践
如下讲述了这么多,就统一来个综合实践,里面包含了动态传参,添加请求头,json入参嵌套等,如下所示:
import requests
import json host = '' # json数据转换格式,ensure_ascii显示为中文
def better_output(json_str):
return json.dumps(json.loads(json_str), indent=4, ensure_ascii=False) def login():
# 普通登录
headers = {'Authorization': ''}
data = {
'username': '',
'password': '',
}
url = host + '/token'
r = requests.post(url=url, data=data, headers=headers, verify=False) # 设置全局变量
global token
token = (r.json()["access_token"]) print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print("+++登录接口响应的状态码为:" + str(r.status_code)) # 获取返回状态
print("+++登录接口响应的数据为:" + better_output(r.text)) # 打印解码后的返回数据
print("+++获取到的token值为:" + token)
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") def search_gender_data():
# 搜索接口
headers = {
'Content-Type': 'application/json;charset=utf-8',
# token传参
'Authorization': 'Bearer ' + token
}
url = host + '/api' r1 = requests.get(url=url, headers=headers)
global gender
gender = r1.json()['values'][0]['code']
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print("+++搜索接口响应的状态码为:" + str(r1.status_code)) # 获取返回状态
print("+++搜索接口响应的数据为:" + better_output(r1.text))
print("+++获取的性别code为:" + gender)
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") def create_user():
headers = {
'Content-Type': 'application/json;charset=utf-8',
# token传参
'Authorization': 'Bearer ' + token
}
data = {
"duty": "",
"dutyCode": "",
"rank": "",
"rankCode": "",
"deleted": 'false',
"userId": "",
"employeeId": "",
"position": "测试负责人",
"companyMainPosition": 'true',
} data1 = {
"departmentPath": "",
"directManager": "",
"directManagerId": '',
"directManagerName": "",
"employeeType": '',
"email": "10150001@qq.com",
"mobile": "",
"mobileCode": "",
"countryCode": "CN",
"employeeTypeCode": "",
"userOID": '',
"employeeID": "",
"fullName": "10150001接口新增",
"status": 1001,
"manager": 'false',
"leavingDate": "3018-01-31T16:00:00.000Z",
"gender": "",
"genderCode": gender,
"birthday": "",
"entryTime": "",
"customFormValues": [],
'userJobsDTOs': [data]
}
url = host + '/api'
create_u = requests.post(url=url, json=data1, headers=headers)
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print("+++创建人员接口url为:" + url)
print("+++创建人员接口响应的状态码为:" + str(create_u.status_code)) # 获取返回状态
print("+++创建人员接口响应的数据为:" + better_output(create_u.text))
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") if __name__ == '__main__':
# 调用函数
login()
search_gender_data()
create_user()
Requests实践详解希望对有需要的朋友有所帮助,都是些基本的操作,博客书写,也是我自己学习的一种方式。文中描述有误的地方,欢迎批评指正。
Requests实践详解的更多相关文章
- python的requests用法详解
Requests是一个Python语言写的http相关设置或者请求的一个库 安装:pip install Requests或者pip3 install requests 使用的时候要import re ...
- python WEB接口自动化测试之requests库详解
由于web接口自动化测试需要用到python的第三方库--requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试. 所以笔者今 ...
- python接口自动化测试之requests库详解
前言 说到python发送HTTP请求进行接口自动化测试,脑子里第一个闪过的可能就是requests库了,当然python有很多模块可以发送HTTP请求,包括原生的模块http.client,urll ...
- Python爬虫:requests 库详解,cookie操作与实战
原文 第三方库 requests是基于urllib编写的.比urllib库强大,非常适合爬虫的编写. 安装: pip install requests 简单的爬百度首页的例子: response.te ...
- Taffy Web开发,Python Flask实践详解
1. 前言 最近为Taffy自动化测试框架写了个页面,主要实现了用例管理.执行,测试报告查看管理.发送邮件及配置等功能. 2. 实现细节 页面使用Python Flask +Bootstrap开发,还 ...
- Python:requests:详解超时和重试
网络请求不可避免会遇上请求超时的情况,在 requests 中,如果不设置你的程序可能会永远失去响应.超时又可分为连接超时和读取超时. 连接超时 连接超时指的是在你的客户端实现到远端机器端口的连接时( ...
- requests库详解 --Python3
本文介绍了requests库的基本使用,希望对大家有所帮助. requests库官方文档:https://2.python-requests.org/en/master/ 一.请求: 1.GET请求 ...
- Python—requests模块详解
1.模块说明 requests是使用Apache2 licensed 许可证的HTTP库. 用python编写. 比urllib2模块更简洁. Request支持HTTP连接保持和连接池,支持使用co ...
- Taffy自动化测试框架Web开发,Python Flask实践详解
1. 前言 最近为Taffy自动化测试框架写了个页面,主要实现了用例管理.执行,测试报告查看管理.发送邮件及配置等功能. 本页面适用所有基于taffy/nose框架编写的自动化测试脚本,或基于un ...
随机推荐
- Three.js 开发机房(四)
这一节我们讲讲怎么画机柜,其实机柜如果作的复杂一点.逼真一点可以用3D建模工具,不过一般的项目中也不用做的那么麻烦,那我们就可以将机柜抽象以下,首先它是一块具有长宽高的立方体铁块,然后我们从中间在掏掉 ...
- HTML5 01. 布局、语义化标签、智能化表单、表单元素/标签/属性/事件、多媒体、类操作、自定义属性
1.知识点 lang = “en” 所用语言是英文 文档结构更简洁 IE8一下不支持h5c3 书写更宽松 div没有语义 标签语义化:在合适的地方使用合适的标签 对seo优化友谊 网页经典布局 页 ...
- 封装axios来管控api的2种方式
前言:我们在开发项目的时候,往往要处理大量的接口.并且在测试环境 开发环境 生产环境使用的接口baseurl都不一样 这时候如果在开发环境完成之后切换每一个接口的baseurl会变的非常的麻烦,(要去 ...
- top_down设计技巧
写在前面的话 之前梦翼师兄和大家一起学习了层次化设计方法,大家应该懂了,哦,原来所谓的层次化设计就是将一个大的系统不断地拆分成一些便于实现的最小逻辑单元.如果大家真的只是这么想的话,那么梦翼师兄真的是 ...
- Storm 系列(六)—— Storm 项目三种打包方式对比分析
一.简介 在将 Storm Topology 提交到服务器集群运行时,需要先将项目进行打包.本文主要对比分析各种打包方式,并将打包过程中需要注意的事项进行说明.主要打包方式有以下三种: 第一种:不加任 ...
- 011 实例2-Python蟒蛇绘制
目录 一."Python蟒蛇绘制"问题分析 1.1 Python蟒蛇绘制 二."Python蟒蛇绘制"实例编写 三.运行效果 3.1 程序关键 四." ...
- OPENLDAP 服务搭建和后期管理
LDAP 服务 本文首发:https://www.cnblogs.com/somata/p/OPENLDAPServerConfigAndPostManagement.html 本文主要在debian ...
- Hola!
个人资料 我叫Xenny,当然我还有很多名字,Tony.LTY.唐梦寒.soar.tafhack等等,这些都是我的昵称:但是用的最多的还是Xenny. Xenny的来历很扯,Xen是因为从XD中取了个 ...
- .NET Conf 2019 大会上发布.NET Core 3.0
北京时间今天凌晨如期在.NET Conf 上发布.NET Core 3.0,Keynotes 由Scott Hunter 主演,主要围绕.NET Core 3.0的新特性和社区展开. 多功能性是.Ne ...
- 主动降噪技术(ANC)的前生今世--概念历史
一 概念 假如使用一句通俗的语言来概述ANC的原理的话,那就是:通过发出与噪声相位相反,频率.振幅相同的声波与噪声干涉实现相位抵消. 使用比较正式的语言来解释就是:动降噪通过降噪系统产生与外界噪音相等 ...