【Spring Boot】内网穿透实现远程调用调试

2023-12-16

在前后端分离项目中调用接口调试时候,我们可以通过cpolar内网穿透工具,将本地服务端接口模拟公共网络环境远程调用调试,本次教程我们以Java服务端接口为例,测试如何使用固定公网地址进行调用。

1. 本地环境搭建

1.1 环境参数

  • JDK1.8
  • IDEA
  • SpringBoot
  • Maven
  • Tomcat9.0
  • Postman

1.2 搭建springboot服务项目

搭建一个springboot服务的项目,编写一个接口,为了更好直观看到,这里创建一个pos请求的接口

@RestController
@RequestMapping("/test")
public class InterfaceTest {
    
    /**
     * 测试接口
     * @param data
     * @return Map<String,String>
     */
    @PostMapping("/interTest")
    public Map<String,String>interTest(@RequestBody Map<String,String> data){
        System.out.println(data);

        if (data.size()>0){

            return  data;
        }

        data.put("code","404");
        return data;
    }
}

2. 内网穿透

这里我们使用cpolar来进行内网穿透,支持http/https/tcp协议,不限制流量,无需公网IP,也不用设置路由器,使用简单。

2.1 安装配置cpolar内网穿透

cpolar官网: https://www.cpolar.com/

2.1.1 windows系统

进入cpolar官网后,下载windows版本版本,双击安装包一路默认安装即可。

2.1.2 linux系统

  • cpolar 安装(国内使用)
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
  • 或 cpolar短链接安装方式:(国外使用)
curl -sL https://git.io/cpolar | sudo bash
  • 查看版本号,有正常显示版本号即为安装成功
cpolar version
  • token认证

登录cpolar官网后台,点击左侧的验证,查看自己的认证token,之后将token贴在命令行里

cpolar authtoken xxxxxxx

20230417112726

  • 简单穿透测试
cpolar http 8080

按ctrl+c退出

  • 向系统添加服务
sudo systemctl enable cpolar
  • 启动cpolar服务
sudo systemctl start cpolar
  • 查看服务状态

20230417112718

2.2 创建隧道映射本地端口

cpolar安装成功后,在浏览器上访问本地9200端口【 http://localhost:9200 】,使用cpolar账号登录。

20230130105810

点击左侧仪表盘的隧道管理——创建隧道,创建一个tomcat的8080端口 http隧道

  • 隧道名称:可自定义命名,注意不要与已有的隧道名称重复
  • 协议:选择http
  • 本地地址:8080
  • 域名类型:免费选择随机域名
  • 地区:选择China vip

点击 创建

20230130105901

隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网地址,然后复制地址

20230130105902

2.3 测试公网地址

这里以Postman接口调试工具向接口发送请求,在postman创建一个post请求方式.输入复制的公网地址加上接口路径,参数使用JSON格式,设置好参数点击

20230130105903

在服务接口端debug调试接口,查看请求是否进入接口,进入接口表示调用成功

20230130105904

3. 固定公网地址

由于以上使用cpolar所创建的隧道使用的是随机公网地址,24小时内会随机变化,不利于长期远程访问。因此我们可以为其配置二级子域名,该地址为固定地址,不会随机变化

注意需要将cpolar套餐升级至基础套餐或以上,且每个套餐对应的带宽不一样。【cpolar.cn已备案】

3.1 保留一个二级子域名

登录cpolar官网,点击左侧的预留,选择保留二级子域名,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称

20230130105905

3.2 配置二级子域名

访问 http://127.0.0.1:9200/ ,登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的8080隧道,点击右侧的编辑

20230130105906

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名,本例为test01

点击 更新

20230130105907

更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址名称也变成了保留过的二级子域名名称,将其复制下来

20230130105908

3.2 测试使用固定公网地址

打开postman,使用固定http地址进行调用

20230130105909

同样在服务端debug调试查看请求是否进入接口,进入接口表示成功

20230130105910

4. Cpolar监听器

我们还可以使用cpolar监听器( http://localhost:4040 )查看接口请求日志,处理一个讨厌的bug。甚至可以重播请求消息包,加速测试的请求,单击重放(Replay)按钮,重新发送该HTTP信令请求,而不是手动重新触发操作。下面介绍使用cpolar监听器监听请求。

4.1 开启侦听功能

选择我们刚刚创建配置的http隧道,并点击右侧的 编辑

20230130105911

打开高级设置,开启侦听功能

20230130105912

4.2 请求侦听

在浏览器访问本地4040端口, http://localhost:4040

20230130105913

向服务端发送请求后,此处就会显示相关的请求日志,可以看到请求的方式,请求的数据,接口路径,和返回状态及结果,极大提高了调试效率。

20230130105914

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Spring Boot】内网穿透实现远程调用调试 的相关文章

  • 无法解析类型为 xxx 的任何 bean;限定符:[@javax.enterprise.inject.Any()]

    我有一个 LoginProvider 接口 public interface LoginProvider boolean login String username String password 以及两种不同的实现 public clas
  • 使用 GWT CellTableBuilder 构建树表

    Is it possible to build a tree table like this http www sencha com examples ExamplePlace basictreegrid with the new Cell
  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • Condition 接口中的 signalAll 与对象中的 notificationAll

    1 昨天我才问过这个问题条件与等待通知机制 https stackoverflow com questions 10395571 condition vs wait notify mechanism 2 我想编辑相同的内容并在我的问题中添加
  • 在 HTTP 标头中发送 UTF-8 值会导致 Mojibake

    我想使用 servlet 发送阿拉伯语数据HTTPServletResponse给客户 我正在尝试这个 response setCharacterEncoding UTF 8 response setHeader Info arabicWo
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 如何在android中设置多个闹钟,在这种情况下最后一个闹钟会覆盖以前的闹钟

    我正在开发一个Android应用程序 用户可以在其中设置提醒时间 但我在以下代码中遇到一个问题 即最后一个警报会覆盖之前的所有警报 MainActivity java public void setreminders DatabaseHan
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • 如何将 Jfreechart(饼图)添加到 netbeans 的面板中

    我正在使用 netbeans gui 编辑器 并且正在尝试添加一个本身位于内部框架中的 Jfreechart 并且这个内部框架我想将其添加到面板中 正如您在此图中看到的那样 抱歉 我无法直接发布图像 因为我新手 http www flick
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false

随机推荐

  • 2023年度盘点:AIGC、AGI、GhatGPT、人工智能大模型必读书单

    文末送书 今天推荐几本AIGC AGI GhatGPT 人工智能大模型领域优质书籍 前言 2023年是人工智能大语言模型大爆发的一年 一些概念和英文缩写也在这一年里集中出现 很容易混淆 甚至把人搞懵 LLM Large Language M
  • ADS Via Designer 快速建模举例

    如何快速地对设计中的差分过孔进行建模 是layout前仿真中经常遇到的问题 好在目前主流的仿真软件都提供了独立的过孔建模向导 可以很方便地进行操作 本文以ADS提供的Via Designer向导为例 展示如何快速完成过孔的建模操作 以下图所
  • 代码混淆技术探究与工具选择

    代码混淆技术探究与工具选择 引言 在软件开发中 保护程序代码的安全性是至关重要的一环 代码混淆 Obfuscated code 作为一种常见的保护手段 通过将代码转换成难以理解的形式来提升应用被逆向破解的难度 本文将介绍代码混淆的概念 方法
  • 2023自动化测试框架的设计原则你都知道吗?快来看!

    1 代码规范 测试框架随着业务推进 必然会涉及代码的二次开发 所以代码编写应符合通用规范 代码命名符合业界标准 并且代码层次清晰 特别在大型项目 多人协作型项目中 如果代码没有良好的规范 那么整个框架的代码会风格混杂 晦涩难懂 后续维护会很
  • 【Linux】系统初识之冯诺依曼体系结构与操作系统

    樊梓慕 个人主页 个人专栏 C语言 数据结构 蓝桥杯试题 LeetCode刷题笔记 实训项目 C Linux 每一个不曾起舞的日子 都是对生命的辜负 目录 前言 1 冯诺依曼体系结构 2 操作系统 OS 1 用户到操作系统再到底层是如何组织
  • 【教程】app备案流程简单三部曲即可完成

    APP备案流程包括以下步骤 1 开发者实名认证 在提交备案申请之前 开发者需要通过移动应用开发平台进行实名认证 这个步骤需要提供身份证号码 姓名 联系方式等信息 并上传相关证件照片或扫描件 2 应用信息登记 开发者需要在应用商店或应用发布平
  • 【Linux】进程周边002之进程状态

    樊梓慕 个人主页 个人专栏 C语言 数据结构 蓝桥杯试题 LeetCode刷题笔记 实训项目 C Linux 每一个不曾起舞的日子 都是对生命的辜负 目录 前言 1 什么是状态 1 1运行 1 2阻塞
  • C/C++查找算法-----------------------二分查找详解

    二分查找 定义 实例 定义 二分查找也称折半查找 搜索过程从数组的中间元素开始 如果中间元素正好是要查找的元素 则搜索过程结束 如果某一特定元素大于或者小于中间元素 则在数组大于或小于中间元素的那一半中查找 而且跟开始一样从中间元素开始比较
  • 华为OD机试真题-文本统计分析-2023年OD统一考试(C卷)

    题目描述 有一个文件 包含以一定规则写作的文本 请统计文件中包含的文本数量 规则如下 1 文本以 分隔 最后一条可以没有 但空文本不能算语句 比如 COMMAND A 只能算一条语句 注意 无字符 空白字符 制表符都算作 空 文本 2 文本
  • 华为OD机试真题-求幸存数之和-2023年OD统一考试(C卷)

    题目描述 给一个正整数列 nums 一个跳数 jump 及幸存数量 left 运算过程为 从索引为0的位置开始向后跳 中间跳过 J 个数字 命中索引为J 1的数字 该数被敲出 并从该点起跳 以此类推 直到幸存left个数为止 然后返回幸存数
  • 【教程】源代码加密、防泄密软件

    什么是代码混淆 代码混淆 是一种将应用程序二进制文件转换为功能上等价 但人类难于阅读和理解的行为 在编译 Dart 代码时 混淆会隐藏函数和类的名称 并用其他符号替代每个符号 从而使攻击者难以进行逆向工程 Flutter 的代码混淆功能仅在
  • Axure中动态面板使用及轮播图&多种登录方式&左侧导航栏之案列

    艳艳耶 个人主页 个人专栏 越努力 越幸运 目录 一 轮播图简介 1 什么是轮播图 2 轮播图有什么作用 3 轮播图有什么特点 4 轮播图适应范围 5 动态面板的入门教程 6 轮播图案列 二 多种方式登录 1 什么是多种方式 2 常见的多种
  • 2023年度盘点:智能汽车、自动驾驶、车联网必读书单

    文末送书 今天推荐几本自动驾驶领域优质书籍 前言 2023年 智能驾驶和新能源汽车行业仍然有着肉眼可见的新进展 自动驾驶技术继续尝试从辅助驾驶向自动驾驶的过渡 更重要的是相关技术成本的下降 根据 全球电动汽车展望2023 等行业报告 预计2
  • 【Linux】进程周边003之进程优先级

    樊梓慕 个人主页 个人专栏 C语言 数据结构 蓝桥杯试题 LeetCode刷题笔记 实训项目 C Linux 每一个不曾起舞的日子 都是对生命的辜负 目录 前言 1 基本概念 2 PRI与NI
  • 计算机毕业设计-基于Java+Springboot架构的点餐平台网站项目开发实战(附论文+源码)

    大家好 我是职场程序猿 感谢您阅读本文 欢迎一键三连哦 当前专栏 Java毕业设计 精彩专栏推荐 安卓app毕业设计 微信小程序毕业设计 开发环境 开发语言 Java 框架 springboot JDK版本 JDK1 8 服务器 tomca
  • 找不到mfc100u.dll,程序无法继续执行?三步即可搞定

    在使用电脑过程中 我们经常会遇到一些错误提示 其中之一就是 找不到mfc100u dll mfc100u dll是Microsoft Foundation Class MFC 库中的一个版本特定的DLL文件 MFC是微软公司为简化Windo
  • 平面腔体谐振计算与仿真

    PCB的电源网络是由电介质材料隔开的两个平行金属板所组成 可以通过以下的3种方法对其谐振模式进行分析 1 基于腔体模型的计算 2 基于SPICE等效电路 3 基于全波数值电磁算法的3D模型 设计得当的前提下 上述3种方法可以得到相同的结果
  • 如何做好性能压测?压测环境设计和搭建的7个步骤你知道吗?

    简介 一般来说 保证执行性能压测的环境和生产环境高度一致是执行一次有效性能压测的首要原则 有时候 即便是压测环境和生产环境有很细微的差别 都有可能导致整个压测活动评测出来的结果不准确 1 性能环境要考虑的要素 1 1 系统逻辑架构 系统逻辑
  • 计算机毕业设计-基于Java+Springboot架构的学生毕业离校系统项目开发实战(附论文+源码)

    大家好 我是职场程序猿 感谢您阅读本文 欢迎一键三连哦 当前专栏 Java毕业设计 精彩专栏推荐 安卓app毕业设计 微信小程序毕业设计 开发环境 开发语言 Java 框架 springboot JDK版本 JDK1 8 服务器 tomca
  • 【Spring Boot】内网穿透实现远程调用调试

    文章目录 1 本地环境搭建 1 1 环境参数 1 2 搭建springboot服务项目 2 内网穿透 2 1 安装配置cpolar内网穿透 2 1 1 windows系统