requests是python实现的最简单易用的HTTP库python
官网地址:http://cn.python-requests.org/zh_CN/latest/android
1、环境安装正则表达式
cmd -> pip install requests,安装完成后输入pip list能够看到requests即表明安装成功json
2、get请求服务器
1. 未携带参数cookie
# 第一步:导入包
import requests
# 第二步:发送get请求
urlstr = 'https://www.wanandroid.com/blog/show/2'
r = requests.get(url=urlstr) # r = response
# 第三步:获取结果
print(r.text)
注意:状态码200只能说明这个接口访问的服务器地址是对的,并不能说明功能OK,通常要查看响应的内容,r.text是返回文本信息函数
2. 携带参数 -- 参数单独写工具
# 导入包
import requests
# 发送get请求
urlstr = 'https://www.wanandroid.com/article/query'
param = {'k':'Android'} # 参数
r = requests.get(url=urlstr,params=param)
# 获取结果
print(r.text)
print(r.status_code)
3. 携带参数 -- 参数直接放在url中post
import requests
# 发送get请求,将参数直接携带在url中
urlstr = 'https://www.wanandroid.com/article/query?key=Android'
r = requests.get(url=urlstr)
# 获取结果
print(r.text)
print(r.status_code) # 打印出状态码
print(r.headers) # 打印出header信息
4.多个参数格式:编码
param = {"key1": "value1", "key2": "value2", "key3": "value3"}
5.content
百度首页若是用r.text会发现获取到的内容有乱码,由于百度首页响应内容是gzip压缩的(非text文本)
若是是在fiddler工具乱码,是能够点击后解码的,在代码里面能够用r.content这个方法,content会自动解码 gzip 和deflate压缩
代码:
import requests
r = requests.get('https://www.baidu.com')
print(r.url)
print(r.encoding) # 编码
print(r.content) # 获取返回内容(自动解码gzip)
print(r.headers)
print(r.cookies)
6.response -- 返回内容还有其它更多信息
-- r.status_code #响应状态码
-- r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
-- r.headers #以字典对象存储服务器响应头,可是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
-- r.json() #Requests中内置的JSON解码器,处理后对应Python的dict
-- r.url # 获取url
-- r.encoding # 编码格式
-- r.cookies # 获取response返回的cookie
-- r.raw #返回原始响应体
-- r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
-- r.raise_for_status() #失败请求(非200响应)抛出异常
3、发送post请求
1. 用help函数查看相关注释和案例内容
import requests
help(requests)
① 查看python发送get和post请求的案例
② 发送post请求(json形式)
post的body是json类型,有两种方法来传递json数据
第一种:先导入json模块,用dumps方法转化成json格式
import requests,json
# 发送请求
urlstr = 'http://httpbin.org/post'
payload = {'qq群名':'selenium+jmeter+loadrunner','qq群号':'106014970'}
# 经过json.dumps方法将python字符串转化成json类型
payload = json.dumps(payload)
# 发送请求
r = requests.post(url=urlstr,data=payload)
# 获取结果
print(r.text)
# 返回为json类型,既能够经过r.json方法来查看结果
print(r.json())
第二种:使用json参数默认处理成json格式进行传递
import requests,json
# 发送post请求
urlstr = 'http://httpbin.org/post'
payload = {'qq群名':'selenium+jmeter+loadrunner','qq群号':'106014970'}
# 发送请求,接口请求为json数据,经过json=自动将python对象转变为json类型
r = requests.post(url=urlstr,json=payload)
# 获取结果
print(r.text)
# 返回为json类型,便可以经过r.json方法来查看结果
print(r.json())
最后返回结果,传到data里
2. 发送post请求 -- 表单形式
① 登陆接口
# 导入包
import requests
# 发送post请求
urlstr = 'https://www.wanandroid.com/user/login'
# 参数
data = {'username':'annieliang','password':'123456'}
r = requests.post(url=urlstr,data=data)
# 获取结果(与fiddler中抓到的请求一致)
print(r.text)
print(type(r.json())) # 查看类型
# 经过dict-key来访问对应的值
print(r.json())
print(r.json()['errorCode'])
print(r.json()['data']['username'])
运行结果为:
{"data":{"admin":false,"chapterTops":[],"collectIds":[-1],"email":"","icon":"","id":22395,"password":"","token":"","type":0,"username":"annieliang"},"errorCode":0,"errorMsg":""}
<class 'dict'>
{'errorMsg': '', 'errorCode': 0, 'data': {'password': '', 'admin': False, 'type': 0, 'collectIds': [-1], 'icon': '', 'token': '', 'chapterTops': [], 'username': 'annieliang', 'email': '', 'id': 22395}}
0
annieliang
②判断登陆成功 -- 能够抓取页面上的关键元素,好比:帐号名称,注销按钮,而后经过正则表达式提出这2个关键字
import requests
# 发送post请求
urlstr = 'https://www.wanandroid.com/user/login'
# 参数
payload = {'username':'annieliang','password':'123456'}
# 第二步:发送请求
r = requests.post(url=urlstr,data=payload)
# 第三步:获取结果(与fiddler中抓到的请求一致)
print(r.text)
# 查看类型后为字典类型,r.json将response中返回的json处理成了dict
print(type(r.json()))
# 经过dict-key来访问对应的值
print(r.json()['data']['username'])
# 判断是否登陆成功(username是不是username)
# 判断返回的json数据是否有登陆的用户名或经过正则来获取
if r.json()['data']['username'] == payload['username']:
print('登陆成功!')
运行结果为:
{"data":{"admin":false,"chapterTops":[],"collectIds":[-1],"email":"","icon":"","id":22395,"password":"","token":"","type":0,"username":"annieliang"},"errorCode":0,"errorMsg":""
<class 'dict'>
annieliang
登陆成功!
4、携带header和cookie参数发送请求
1.以玩Android登陆为例,抓包查看请求头,header为Python的字典类型,因此能够支持dict类型的全部操做方式添加header信息,能够直接定义{},也能够经过dict[key]的方式添加
# 导入包
import requests
# 发送get请求
urlstr = 'https://www.wanandroid.com/blog/show/2'
header = {'User-Agent':'Mozzilla/5.0'}
cookie = {'JSESSIONID':'3E08EBE7538380CE432C7FEA74244011'}
r = requests.get(url=urlstr,headers=header)
# 获取结果
print(r.text)
print(r.headers)
print(r.cookies)
fiddler抓包获得header和cookie信息:
5、正则表达式(待补充)
6、os包的用法-path(待补充)