目录
前言
最初就是因为在微信看到一篇文章中,看到此http工具的制作因为觉得Streamlit有无限开的可能,对于快速构建安全工具有着极大的便利,下面对此工具进行学习一番
下面是这个工具的web界面展示,功能是可以通过填入请求的url地址,然后选择不同的请求方式,并填入请求体,最后发送请求,达到返回json格式信息的效果
HTTP工具功能点:
- 发送HTTP请求:用户输入请求URL、请求方法和请求头信息,工具对请求进行封装后发送HTTP请求。
- 查看响应结果:工具接收到服务器响应后,将响应结果展示给用户以便于查看。
- 关注请求细节:用户可以查看请求发送的细节信息,包括请求发送时间、请求耗时、请求大小等。
1. 导入库:
导入所需的Python库:requests
用于发送HTTP请求,streamlit
用于构建Web应用界面,datetime
用于获取时间戳(处理请求的以及响应时间等),json
用于处理JSON数据(返回和请求体的数据格式为json)。
-
# 模拟HTTP请求工具
-
import requests
# type: ignore
-
import streamlit
as st
# type: ignore
-
import datetime
-
import json
2.设置页面配置:
下面是Streamlit构建web应用使用的语法其中st.set_page_config用于
设置title标题和在tiitle部分的一个图标。使用st.title
设置如上图所示的页面的主标题。
-
st.set_page_config(page_title=
"HTTP请求模拟工具", page_icon=
"🚀")
-
st.title(
"HTTP请求模拟工具")
3. Markdown格式的说明文本:
下面也是使用Streamlit构建web应用使用的语法,将内部的信息通过markdown语法格式展示的文本,将其按照markdown格式显示在web页面上,如果不懂Markdown可以在csdn的技能树学习一下,个人感觉对于入们和使用还是不错的
-
st.markdown(
"""
-
---
-
### 功能点:
-
1. 发送HTTP请求:用户输入请求URL、请求方法和请求头信息,工具对请求进行封装后发送HTTP请求。
-
2. 查看响应结果:工具接收到服务器响应后,将响应结果展示给用户以便于查看。
-
3. 关注请求细节:用户可以查看请求发送的细节信息,包括请求发送时间、请求耗时、请求大小等。
-
---
-
""")
4.用户输入界面:
构建web的语法,先是通过st.text_input创建一个可以输入请求url的输入框,其中value为指定默认第一请求的值,而其中"请输入**请求的URL地址:**"中的**是代表markdown中加粗字体的语法,然后通过st.selectbox创建一个可以选择请求方式的单选框,用作选择请求方式
-
url = st.text_input(
"请输入**请求的URL地址:**",value=
"https://e.weather.com.cn/p/site/aqifc1h?areaid=101010300")
-
method = st.selectbox(
"请求方式", [
"GET",
"POST",
"PUT",
"DELETE"])
-
headers = st.text_input(
"请求头信息")
5. 发送请求按钮和逻辑:
下面和python代码有些不不同,但是如果看过之前Streamlit的基础概念的师傅就知道下面是什么意思了,其中st.button("发送请求") 其中是将发送请求作为参数传入作为按钮显示的文字,而点击后,便会传入true值,执行下面的if headers的代码,其中当你指定请求头后,点击按钮通过eval方法会将输入的请求头转为字典格式,错误的话便会在页面显示如下提示的错误信息,并将headers设置为None
-
if st.button(
"发送请求"):
-
if headers:
-
try:
-
eval(headers)
-
except Exception
as e:
-
st.error(
"请求头信息格式有误,请确认输入的是字典格式,例如:{'key1': 'value1', 'key2': 'value2'}")
-
headers ==
None
-
else:
-
headers =
None
6.发送HTTP请求并计算请求细节:
下面就是python中的一些基本语法以及Streamlit构建web应用的一些语法了
学习过python爬虫以及看过之前我写的Streamlit的文章的的话,下面内容便很容易理解了
其中下面就类似于java中的try-catch语句,作用就是执行代码并抛出异常(捕获可能发生的异常),如果出现错误,便会出现如下信息
先是通过time模块中的语法,来获取请求前以及请求后的时间,并将其计算,算出此次请求的时间并展示到页面, 其次就是中间两次计时之前,使用了request库中的请求,将之前填入的url,包括请求方式,以及请求头信息传入,并将响应信息传给变量reponse 获取响应报文长度,然后将请求细节的一些信息,通过模板字符串的形式传入,并通过st.write()显示到页面上
最后将响应结果信息,先是通过json库,将响应的报文信息转为json格式,并以json格式显示在页面上,如果无法转为json格式,便以文本格式展示到页面上
-
try:
-
start_time = datetime.datetime.now()
-
response = requests.request(method=method,url=url, headers=headers,timeout=
5)
-
end_time = datetime.datetime.now()
-
time_count= (end_time - start_time).total_seconds()
-
size=
len(response.content)
-
st.subheader(
"请求细节:")
-
st.write(
f"请求方法:{method}")
-
st.write(
f"请求URL:{url}")
-
st.write(
f"请求头:{headers}")
-
st.write(
f"请求发送时间:{start_time}")
-
st.write(
f"请求耗时:{time_count}")
-
st.write(
f"请求大小:{size} bytes")
-
st.subheader(
"响应结果:")
-
try:
-
pretty_json = json.loads(response.text)
-
st.json(pretty_json)
-
except:
-
st.text(response.text)
-
except Exception
as e:
-
st.error(
f"请求发送失败:{e}")
返回并设置为成功设置为JSON格式的信息
无法设置为Json格式响应信息为文本格式
7.总结
总的来说,这个工具的开发作者通过结合python与Streamlit还是写出了一个很不错的http工具的,但是还是出现例如无法在post请求或是get请求下输入josn格式的请求报文信息,对与安全测试人员来说还是存在一定的不便利的,后续自己会在这个基础上对其进一步开发使其可以进行灵活请求并测试数据