Flask+requests发起页面请求示例
时间:2022-07-25
本文章向大家介绍Flask+requests发起页面请求示例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文主要记录通过flask+requests发起请求的示例,包括:
1、发起get请求
2、发起post请求
3、发起可选请求
1、Flask和Requests怎么一起发送get请求?
1.1 flask访问url的时候,会执行路径下对应的方法。
- 示例:访问百度
from flask import Flask
import requests
app = Flask(__name__)
url = 'http://www.baidu.com'
@app.route('/get')
def get():
r = requests.get(url)
r.encoding = 'utf-8'
return r.text
app.run(debug=True)
- 结果:
1.2 在页面上展示一个接口的断言结果
__author__ = 'catleer'
from flask import Flask
import requests
app = Flask(__name__)
url = 'http://www.baidu.com'
def get_assert():
r = requests.get(url)
if r.status_code == 200:
return True
else:
return False
@app.route('/get')
def get():
if get_assert():
return '通过'
else:
return '失败'
app.run(debug=True)
结果:
- 将url变为其他具有反爬机制的url,会发现结果是失败,因为页面有反爬虫机制,不允许使用这种方式访问。对于这种情况,要记录失败的原因。在测试内部web页面的时候,要注意考虑这种情况。
- 将url变为非法的url,会直接导致服务报错,所以当接口地址非法时,需要有异常处理机制
1.3 对get请求进行基本的异常处理
import re
from flask import Flask
import requests
app = Flask(__name__)
url1 = 'https://www.jianshu.com/u/39cef8a56bf9'
url = 'http://www'
def get_assert(url):
# 判断url是否合法,需要了解url的构成,用正则匹配进行判断
# url的构成:协议、域名、端口、虚拟目录、文件名、参数部分等 其中:协议、域名是必须存在的
# 协议为:http或https 域名为:xxx.xxxx.xxx 端口为:数字
if not re.match(r'^https?://[^s]*.[^s]*.[com|cn|net].*', url):
return 'URL不合法,无法执行接口用例'
r = requests.get(url)
r.encoding = 'utf-8'
if r.status_code == 200:
return True
else:
return r.text
@app.route('/get')
def get():
if get_assert(url) == True:
return '通过'
else:
return '失败' + ',' + '失败原因:' + get_assert(url)
结果:
2、通过flask发送post请求
2.1 flask和requests怎么发送post请求呢?
以登录禅道系统为例,传入post的参数包括url和data,data为json格式,包括:token、用户名、密码等,需要与实际接口传入的参数一致。
"""
Created by catleer on 2018-06-08.
"""
__author__ = 'catleer'
import re
from flask import Flask
import requests
app = Flask(__name__)
url1 = 'https://www.jianshu.com/u/39cef8a56bf9'
url = 'http://139.99.152.146:8080/zentao/user-login.html'
data = {'authenticity_token': '+gy/zbvCNJATHwvygafFlOOR4gF5dl3bzheFlArNlN3IvlSuURRTZYbFZ5wTAdIwWl+TaykOF+lXbwQXWYkodg==',
'user[email]': '123456789@qq.com',
'user[password]': '123456789',
'user[remember_me]': '0',
'commit': '登录'}
def post_assert(url, data):
# 判断url是否合法,需要了解url的构成,用正则匹配进行判断
# url的构成:协议、域名、端口、虚拟目录、文件名、参数部分等 其中:协议、域名是必须存在的
# 协议为:http或https 域名为:xxx.xxxx.xxx 端口为:数字
if not re.match(r'^https?://[^s]*.[^s]*.[com|cn|net].*', url):
return 'URL不合法,无法执行接口用例'
r = requests.post(url, data=data)
r.encoding = 'utf-8'
if r.status_code == 200:
return True
else:
return r.text
@app.route('/post')
def get():
if post_assert(url, data) == True:
return '通过'
else:
return '失败' + ',' + '失败原因:' + post_assert(url, data)
app.run(debug=True)
import re
from flask import Flask
import requests
app = Flask(__name__)
url1 = 'https://www.jianshu.com/u/39cef8a56bf9'
url = 'http://httpbin.org/anything'
data = {'a': 'hi'}
def post_assert(url, data):
# 判断url是否合法,需要了解url的构成,用正则匹配进行判断
# url的构成:协议、域名、端口、虚拟目录、文件名、参数部分等 其中:协议、域名是必须存在的
# 协议为:http或https 域名为:xxx.xxxx.xxx 端口为:数字
if not re.match(r'^https?://[^s]*.[com|cn|net|org].*', url):
return 'URL不合法,无法执行接口用例'
r = requests.post(url, data=data)
r.encoding = 'utf-8'
if r.status_code == 200:
return True
else:
return r.text
@app.route('/post')
def get():
if post_assert(url, data) == True:
return '通过'
else:
return '失败' + ',' + '失败原因:' + post_assert(url, data)
app.run(debug=True)
3、通过Flask发送请求,请求可选
3.1 Flask发送请求
前面看到,可以通过flask发送get或post请求,那么怎么通过Flask发送任意类型的请求呢,怎么把这些集成在一个方法中?
通过自定义一个request方法,将get或post作为参数传入。
import re
from flask import Flask
import requests
from requests import Request, Session
app = Flask(__name__)
url1 = 'https://www.jianshu.com/u/39cef8a56bf9'
url = 'http://httpbin.org/anything'
data = {'a': 'hi'}
def try_request(method, url, data,
header={}, stream=True, verify=False,
proxies={}, cert=None, timeout=100):
if not re.match(r'^https?://[^s]*.[com|cn|net|org].*', url):
return 'URL不合法,无法执行接口用例'
s = Session()
method = method.upper()
req = Request(method, url,
data=data,
headers=header
)
prepped = req.prepare()
resp = s.send(prepped,
stream=stream,
verify=verify,
proxies=proxies,
cert=cert,
timeout=timeout
)
resp.encoding = 'utf-8'
if resp.status_code == 200:
return True
else:
return resp.text
# method = 'get'
@app.route('/requests/<method>')
def get(method):
if try_request(method, url, data) == True:
return '<h1>请求方法, %s!请求结果:通过</h1>' % method
else:
return '失败' + ',' + '失败原因:' + try_request(method, url, data)
app.run(debug=True)
查看显示结果:
【技术创作101训练营】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 语义分割之Dice Loss深度分析
- SAP CRM One Order函数SAVE_EC的设计原理
- SAP CRM One Order函数CHANGE_OW的设计原理
- 关于checkpoint你可能不知道的事
- SAP CRM One Order函数CRM_Object_FILL_OW的设计原理
- SAP CRM One Order header extension的缓存机制设计原理
- SAP CRM数据库表CRMD_CUMULAT_H的设计原理
- Python从入门到大师一百篇教程 | 前言:Python的前世和发展
- Java和ABAP的垃圾回收机制(Garbage Collection)比较
- Java和SAP ABAP的异常处理
- Java的字节码和ABAP load的比较
- matplotlib | Python强大的作图工具,让你从此驾驭图表(一)
- 使用ES6的fetch API读取数据时要注意的一个和cookie相关的坑
- 跟牛老师一起学WEBGIS——WEBGIS基础(地图切片)
- Go语言 | 并发设计中的同步锁与waitgroup用法