使用Streamlit构建一个web模拟HTTP请求工具

news2024/12/23 20:49:32

目录

前言

HTTP工具功能点:

1. 导入库:

 2.设置页面配置:

3. Markdown格式的说明文本:

4.用户输入界面:

5. 发送请求按钮和逻辑:

6.发送HTTP请求并计算请求细节:

7.总结


 

前言

        最初就是因为在微信看到一篇文章中,看到此http工具的制作因为觉得Streamlit有无限开的可能,对于快速构建安全工具有着极大的便利,下面对此工具进行学习一番

        下面是这个工具的web界面展示,功能是可以通过填入请求的url地址,然后选择不同的请求方式,并填入请求体,最后发送请求,达到返回json格式信息的效果

HTTP工具功能点:

  1. 发送HTTP请求:用户输入请求URL、请求方法和请求头信息,工具对请求进行封装后发送HTTP请求。
  2. 查看响应结果:工具接收到服务器响应后,将响应结果展示给用户以便于查看。
  3. 关注请求细节:用户可以查看请求发送的细节信息,包括请求发送时间、请求耗时、请求大小等。

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格式的请求报文信息,对与安全测试人员来说还是存在一定的不便利的,后续自己会在这个基础上对其进一步开发使其可以进行灵活请求并测试数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第四周:网络应用(下)

一、P2P应用_原理与文件分发 1、纯P2P架构 2、文件分发:客户机/服务器架构 3、文件分发:P2P架构 P2P和CS架构对比: 对于文件分发这类应用来说,P2P架构有着非常好的可扩展性,即当节点数目增大的时候,它所…

Ajax-02

一.form-serialize插件 作用:快速收集表单元素的值 const form document.querySelector(.example-form) const data serialize(form,{hash:true,empty:true}) *参数1:要获取哪个表单的数据 表单元素设置name属性,值会作为对象的属性名 建议…

【初阶数据结构题目】13.环形链表II

环形链表II 点击链接做题 思路:快慢指针 快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表带环则一定会在环中相遇,否则快指针率先走到链表的未尾 让一个指针从链表…

visual studio跳转到上一个/下一个光标处的快捷键设置

vscode能通过Alt左右箭头跳转到上/下一个光标处,这对于“点进函数看源码,看完后跳转到原来位置”是非常方便的。 在Visual Studio中,有2种方法实现这样的功能。 第一种,直接点击这两个按钮:(缺点是每次要用…

阻抗?关于双绞线阻抗的那些事...

双绞线的阻抗不是电阻,而是描述传输高频信号时电磁感应分布特性的一个特性参数。 电缆中的每个微分段的电阻、电容、电感的分布感应值都是不一样。 分析方法:计算每个微分电缆段的感应值分布函数,换算成四端网络参数等效值,单位…

【C语言】预处理详解(下)

文章目录 前言6. 宏和函数的对比7. #和##7.1 #运算符7.2 ##运算符(运用较少,了解即可) 8. 命名的约定9. #undef (了解即可)10. 条件编译(重点)11. 头文件的包含11.1 头文件被包含的方式&#xf…

<数据集>柑橘缺陷识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:1290张 标注数量(xml文件个数):1290 标注数量(txt文件个数):1290 标注类别数:4 标注类别名称:[Orange-Green-Black-Spot, Orange-Black-Spot, Orange-Canker, Orange…

CTFHUB | web进阶 | PHP | Bypass disable_function | Apache Mod CGI

开启题目 点击重置 backdoor 目录,再点击 GetFlag,然后发现了可以蚁剑连接, 连接成功发现无任何发现,所以我们使用 apache_mode_cgi插件 发现直接进入终端了,最后发现了 flag

深入解析Python内省之dir、getattr、hasattr和setattr使用详解

概要 内省(Introspection)是编程语言的一种能力,使程序能够在运行时检查对象的类型、属性和方法。Python提供了强大的内省工具,允许开发者动态地检查和操作对象的属性和方法。本文将详细介绍Python中的内省工具:dir、getattr、hasattr和setattr,并通过具体的示例代码展示…

springboot 股票资产管理系统-计算机毕业设计源码96208

摘要 随着全球金融市场的快速发展,股票交易和投资已经成为重要的经济活动之一。在此背景下,股票资产管理系统的设计与实现显得尤为重要。Spring Boot框架,以其快速、简洁和高效的特性,在股票资产管理系统的开发中得到了广泛应用。…

C++第三十二弹---从概念到实践:全面解析C++多态性

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1. 多态的概念 1.1 概念 2. 多态的定义及实现 2.1 多态的构成条件 2.2 虚函数 2.3 虚函数的重写 2.4 C11 override 和 final 2.5 重载、覆…

【Linux】安装部署docker及docker-compose

环境说明 操作系统:Ubuntu 22.04 架构:x86_64 一、docker安装 1.下载docker源码包 下载地址:https://download.docker.com/linux/static/stable/x86_64/ 注意:如果这个地址互联网打不开,那就开代理访问&#xff…

基于STM32的智能家居安全系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码安全传感器读取代码应用场景 家居安全监控办公环境安全监控常见问题及解决方案 常见问题解决方案结论 1. 引言 在智能家居和办公环境中,安全系统是一个至关重要的组成…

这个低代码开发丝滑小连招,竟还能本地部署?

在这个飞速发展的数字化时代,我们深知每一位开发者对于高效、灵活、安全的开发环境有着不懈的追求。为此,JNPF低代码开发平台最新推出的V5.0版本现已全面支持用户免费本地部署体验!这一重大福利,将为您带来前所未有的开发体验&…

leetcode数论(2280. 表示一个折线图的最少线段数)-几何

前言 经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。 数论包含最大公约数(>2个数)、最大公约数性质、最小公倍数、区间范围质因素计数(最下间隔)、质因素分解、判断质数、平方根、立方根、互质、同余等等。 描述 给…

SwiftUI 如何定制 Picker 视图当前选中行的背景颜色?

功能需求 有时我们希望可以定制 SwiftUI 中 Picker 视图当前选中行的背景色,这可以做到吗? 在上面的演示图中,我们随心所欲地变换着 SwiftUI 中 Picker 视图当前选中行的背景色。这是怎么做到的呢? 在本篇博文中,您将学到以下内容 功能需求1. 钩深极奥:修改 SwiftUI 原…

为什么总是很难很好的理解电工电子知识?终于有了解决的办法!

理解电工电子知识可能具有挑战性,这可以由多种因素造成。以下是一些可能的原因: 抽象性高:电工电子学涉及到电流、电压、电阻、电容、电感等抽象概念,这些概念在日常生活中不易直接观察和体验,因此需要较高的抽象思维…

【nginx】centos7安装并配置开机自启

【nginx】配置开机自启 1.nginx配置开机自启 安装完成nginx之后 vim /lib/systemd/system/nginx.service[Unit] Descriptionnginx Afternetwork.target[Service] Typeforking ExecStart/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload/usr/loc…

使用开源 LLM 充当 LangChain 智能体

太长不看版 开源 LLM 现已达到一定的性能水平,可堪作为智能体工作流的推理引擎。在我们的测试基准上,Mixtral 甚至已超越 GPT-3.5,而且我们还可以通过微调轻松地进一步提高其性能。 引言 经由因果语言建模任务训练出的大语言模型&#xff…

鸿蒙应用服务开发【华为支付服务】客户端

华为支付服务 介绍 本示例展示了使用华为支付服务提供的单次支付,签约代扣。 需要使用华为支付服务接口 kit.PaymentKit。 效果预览 Sample工程的配置与使用 在DevEco中配置Sample工程的步骤如下 [创建项目]及[应用]。打开Sample应用,使用[AppGall…