模仿postman自研的HTTP Client Chrome插件,可绕过浏览器同源政策发起跨域请求

文章目录

  • 1、项目背景
  • 2、准备好服务端接口
  • 3、chrome扩展开发
  • 4、扩展程序演示

1、项目背景

在企业开发过程中,有时候需要手动调用线上服务的接口,我们的服务是通过cookie来保存登录态的,且接口做了身份验证,此时有两种情况:

  1. 接口是GET类型,则可以直接在浏览器地址栏输入接口地址即可访问
  2. 接口是POST或其它类型,则不能在浏览器地址栏直接访问

对于情形2,有如下方式可以解决:

  1. 通过postman等HTTP客户端,但需要手动将cookie同步到postman中,如果cookie较多则非常麻烦(ps:postman其实是有插件可以同步cookie的,但本质还是要做同步)
  2. 写一个js脚本,脚本中可用fetch方法发起网络请求,浏览器运行该脚本。由于是在浏览器中发起请求的,因此不需要同步cookie,但会受到浏览器同源政策的限制,该方法需要依赖服务端作跨域配置

综上所述,目前还没有一个十全十美的方法,于是我又调研了一下chrome插件(chrome扩展)是否有发起跨域请求的能力。

带着半信半疑的心态,首先我找到官方文档仔细阅读后,然后按照官方文档上的教程写了一个demo,运行后发现果然可以绕过浏览器同源政策发起跨域请求并自动携带cookie,基于这一核心能力自己也实现了一个模仿postman的HTTP Client chrome插件,既可以满足工作需要,又能提升自己的技术。

2、准备好服务端接口

服务端使用Spring Boot框架搭建,并编写了分别接收三种类型请求体的接口,分别是form-data、x-www-form-urlencoded和raw(Content-Type:application/json),另外还提供了一个可以新增cookie或修改cookie value的接口,有cookie才能测试chrome扩展发出的网络请求是否能自动携带cookie。

服务端接口如下所示:

ChromeController.java

package com.bobo.springbootbaseservice.chrome;import com.bobo.springbootbaseservice.common.Json;
import com.google.common.collect.ImmutableMap;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;@RequestMapping("/chrome")
@RestController
public class ChromeController {private static final Logger log = LoggerFactory.getLogger(ChromeController.class);@GetMapping("/setCookie")public void setCookie(HttpServletRequest request, HttpServletResponse response,@RequestParam(value = "city",required = false) String city,@RequestParam(value = "company",required = false) String company){if(!StringUtils.isEmpty(city)){response.addCookie(new Cookie("city", city));}if(!StringUtils.isEmpty(company)){response.addCookie(new Cookie("company", company));}}@PostMapping("/jsonReq")public Map<String,String> jsonReq(HttpServletRequest request,@RequestParam(value = "username",required = false) String username,@RequestParam(value = "date",required = false) String date,@RequestBody(required = false) ChromeDto chromeDto){return ImmutableMap.of("cookies",componentCookie(request),"queryParams",String.format("username=%s&date=%s",username,date),"requestBody",Json.serialization(chromeDto));}@PostMapping("/formUrlencodedReq")public Map<String,String> formUrlencodedReq(HttpServletRequest request,@RequestParam(value = "username",required = false) String username,@RequestParam(value = "date",required = false) String date,@RequestParam(value = "source",required = false) String source,@RequestParam(value = "msg",required = false) String msg){return ImmutableMap.of("cookies",componentCookie(request),"queryParams",String

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

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

相关文章

AI 大模型的核心能力与应用场景全解析

深入理解 AI 大模型&#xff1a;核心能力与应用场景全解析 AI大模型是什么 通过概念考察的方式了解AI大模型&#xff0c;拆开来看。 AI领域术语丰富&#xff0c;涵盖模式识别、自然语言处理、神经网络、机器学习、深度学习、强化学习及人类反馈强化学习。大模型&#xff1a;把…

【工欲善其事】巧用 Sublime Text 生成带格式的 HTML 片段

文章目录 【工欲善其事】巧用 Sublime Text 生成带格式的 HTML 片段1 问题由来2 操作流程步骤1&#xff1a;打开代码片段定制页步骤2&#xff1a;在新标签页输入定制 XML步骤3&#xff1a;保存定义内容步骤4&#xff1a;功能测试 3 拓展 【工欲善其事】巧用 Sublime Text 生成带…

【笔记】信度检验

一、信度 信度是指测量结果的一致性和稳定性。 1.一致性&#xff08;Consistency&#xff09; 一致性指的是测量工具内部各个部分或项目之间的协调一致程度。高一致性意味着测量工具的不同部分都在测量同一个概念或特质。 例子&#xff1a;智力测试 假设我们有一个包含100…

c语言函数变长参数原理分析

在 C 语言中&#xff0c;函数可以接受可变数量的参数&#xff0c;这种函数称为“变长参数函数”。变长参数的实现主要依靠标准库 <stdarg.h> 中定义的宏。以下是变长参数的原理、使用方法以及在底层的实现机制的详细解释。 1. 变长参数函数的声明 变长参数函数的基本形…

快速扩展随机数算法

目录 博客大纲详细内容1. 引言2. 快速扩展随机树&#xff08;RRT&#xff09;算法概述3. RRT 算法的实现4. 示例&#xff1a;使用 RRT 算法进行无人机路径规划5. 算法的优缺点6. 改进方向7. 应用场景8. 结论 博客大纲 引言 无人机路径规划的重要性RRT 算法的应用背景 快速扩展…

express,MySQL 实现登录接口,如果用户未注册直接注册

要实现一个登录接口&#xff0c;并在用户未注册时直接注册他们&#xff0c;您需要在您的 Express 应用中处理两个逻辑路径&#xff1a;一个是验证用户是否已存在&#xff08;登录&#xff09;&#xff0c;另一个是在用户不存在时创建新用户&#xff08;注册&#xff09;。以下是…

ai智能论文生成系统有用吗?分享5款ai文献综述自动生成器

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术在学术写作领域的应用越来越广泛&#xff0c;尤其是在文献综述的自动生成方面。AI智能论文生成系统通过深度学习和自然语言处理技术&#xff0c;能够帮助研究人员快速生成高质量的文献综述&#xff0c;从而提高写作效…

物理学基础精解【56】

文章目录 物理学中的数论一次同余式及解法定义数学原理公式与计算例子例题 中国剩余定理&#xff08;Chinese Remainder Theorem&#xff09;定义数学原理公式计算步骤例子例题 中国剩余定理一、定义二、数学原理三、公式四、计算五、例子六、例题 参考文献 物理学中的数论 一…

YOLO v1详解解读

&#x1f680; 在此之前主要介绍了YOLO v5源码的安装和使用&#xff08;YOLO v5安装教程&#xff09;&#xff0c;接下来将探索YOLO的实现原理&#xff0c;作为一个金典的单阶段目标检测算法&#xff0c;应该深度的理解它的构建思想&#xff1b;所以本系列文章将从LOVO v1出发到…

在 Ubuntu 18.04 上安装 Syncthing

在 Ubuntu 18.04 上安装 Syncthing 是一个简单的过程。Syncthing 提供官方的 apt 仓库&#xff0c;使用该仓库可以方便地安装和更新 Syncthing。 https://syncthing.net/downloads/ 文章目录 安装步骤 1: 添加 Syncthing 官方仓库步骤 2: 安装 Syncthing步骤 3: 启动并运行 S…

力扣 简单 110.平衡二叉树

文章目录 题目介绍解法 题目介绍 解法 平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1 //利用递归方法自顶向下判断以每个节点为根节点的左右子树的最大深度是否大于1 class Solution {public boolean isBalanced(TreeNode root) {if(root null){return tr…

SpringBoot在线教育系统:从零到一的构建过程

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理微服务在线教育系统的相关信息成为必然。开…

P1376 [USACO05MAR] Yogurt factory 机器工厂

真的不要怕做贪心的题目&#xff0c;原理都很简单。 题目描述 小 T 开办了一家机器工厂&#xff0c;在 N个星期内&#xff0c;原材料成本和劳动力价格不断起伏&#xff0c;第 i 周生产一台机器需要花费 Ci​ 元。若没把机器卖出去&#xff0c;每保养一台机器&#xff0c;每周…

html5 + css3(下)

目录 CSS基础基础认识体验cssCSS引入方式 基础选择器选择器-标签选择器-类选择器-id选择器-通配符 字体和文本样式1.1 字体大小1.2 字体粗细1.3 字体样式&#xff08;是否倾斜&#xff09;1.4 常见字体系列&#xff08;了解&#xff09;1.5 字体系列拓展-层叠性font复合属性文本…

上传本地项目到GitHub远程仓库(极简洁操作版)

第一步&#xff1a;在GitHub创建一个空的仓库 第二步&#xff1a;将仓库克隆&#xff08;下载&#xff09;到本地 第三步&#xff1a;将你要上传的所有文件放到这个克隆的仓库文件夹中 第四步&#xff1a;通过git add .将待上传文件添加到暂存区 此时&#xff0c;可以通过git …

网络基础 【HTTPS】

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux初窥门径⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a; &#x1f4bb;操作环境&#xff1a; CentOS 7.6 华为云远程服务器 &#x1f339;关注我&#x1faf5;带你学习更多Linux知识…

科普篇--- 什么是硬件在环测试?

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

【60天备战2024年11月软考高级系统架构设计师——第38天:性能优化与高可用设计】

在设计现代云应用时&#xff0c;性能和高可用性是两个至关重要的目标。通过合理的设计和策略&#xff0c;可以确保系统在负载高峰期间仍能保持稳定和快速响应。 性能优化的关键策略 缓存机制&#xff1a;使用缓存技术&#xff08;如Redis、Memcached&#xff09;存储频繁访问…

第二十三章-容器控件QTabWidget

QTabWidget 是 PyQt5 中的一个容器小部件,它可以在一个窗口中创建多个选项卡,每个选项卡包含一个独立的页面。当用户单击不同的选项卡时,可以在相同的区域内显示不同的内容。QTabWidget 通常用于创建选项卡式界面,如浏览器、多设置选项的配置窗口等。 初步示例 下面是一个…

千万不要运行!几个可以整蛊你朋友的Python程序!

Python 能做很多无聊&#xff0c;但有意思的事情&#xff0c;例如接下来的一些案例。以下程序&#xff0c;不要发代码&#xff0c;要不实现不了你整蛊的目的。 要打包成一个 exe 程序&#xff0c;发给朋友才有意思&#xff0c;使用 pip install pyinstaller。 打包命令如下&a…