java实现模拟调用接口

news2024/11/25 14:24:05

本文总结如何用fiddler和postman调试接口,并用java模拟调用接口。

    • fiddler用法

当页面点击事件后,在fiddler出现一个请求,单击左侧请求,在右侧的raw的tab标签,出现该请求的详细内容。

其实一个请求需要两类参数,url请求、headers和body参数,放在postman做模拟请求。

#url请求
POST http://XXXXXX/front/sh/querysr!execute?uid=queryComplexList HTTP/1.1

#header参数
Host: 192.168.1.1
Connection: keep-alive
Content-Length: 3039
Accept: application/json, text/javascript, 
X-Requested-With: XMLHttpRequest
_log4xContextKey: 70AB0BEC5AADD4B406180E
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: 192.168.1.1
Referer: http://XXXXXX/src/module/basesr/query/ComplexQuery.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: sessionid=7c95fded-6ae8-4f29-b488-75eb30be9ea0; 

#body参数
wrkfmTypeCd=3&quickQuery=&busiType=&brdnetAcct=&cmplntsAddr=&cmpgnNm=&rltSysType=&wrkfmShowSwftno=&acptTime=2022-12-01+00%3A00%3A00&endTime=2022-12-31+23%3A59%3A59&acptNum=&acptStaffNum=&arcTimeStart=&arcTimeEnd=&srvReqstTypeId=401002006

    • postman用法

1)根据fiddler的3类参数,分别填到postman三个框

2)post类型的body中可以存放任意的内容格式,浏览器可以根据请求头中指定的content-type类型对请求体进行解析

其对应关系如下:

序号

body

Content-Type

备注

1

form-data

multipart/form-data

它将表单的数据组织成Key-Value形式,用分隔符boundary(boundary可任意设置)处理成一条消息。由于有boundary隔离,所以既可以上传文件,也可以上传参数。

2

x-www-form-urlencoded

application/x-www-from-urlencoded

application/x-www-form-urlencoded是默认的MIME内容编码类型,它在传输比较大的二进制或者文本数据时效率极低。只能上传键值对,不能用于文件上传。不同的field是用&区分开的

3

raw

application/json

可以上传任意格式的文本,可以上传text、json、xml、html等

4

binary

application/octet-stream

只可以上传二进制数据,通常用来上传文件。由于没有键值,所以一次只能上传一个文件

    • java编写util类

新建一个基础类,将header,data,cooker,url等参数,声明私有;并用对应的函数写入这些私有变量。最后用formPost将所有参数聚合执行。

@Slf4j
@Component
public class baseQuery{
    private  Map<String,String> jsonHeader = new HashMap<>();//头文件
    private  Map<String,String> jsonData = new HashMap<>();//查询参数
    private  Map<String,String> jsonCooker = new HashMap<>();//cookie
    private  JSONObject jsonBody = new JSONObject();//body
    private  String url = "";
    
    public Map<String,String> generateFormHeaders(JSONObject object){
        jsonHeader.clear();
        jsonHeader.put("Accept", "application/json, text/javascript, */*; q=0.01");
        jsonHeader.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        jsonHeader.put("x-expect-language", "zh-CN");
        jsonHeader.put("X-Requested-With", "XMLHttpRequest");
        jsonHeader.put("Accept-Language", "zh-CN,zh;q=0.9");
        jsonHeader.put("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36");
        jsonHeader.put("Connection", "keep-alive");
        
        for (String key: object.keySet()) {
            String value = object.getString(key);
            if (!StringUtils.isEmpty(key)) {
                jsonHeader.put(key, value);
            }
        }
        return jsonHeader;
    }
    
    public Map<String, String> generateFormData(JSONObject object) {
        jsonData.clear();
        for (String key: object.keySet()) {
            String value = object.getString(key);
            if (!StringUtils.isEmpty(key)) {
                jsonData.put(key, value);
            }
        }
        return jsonData;
    }
    
    public Map<String, String> generateCookie(JSONObject object) {
        jsonCooker.clear();
        for(String key : object.keySet()) {
            String value = object.getString(key);
            if(!StringUtils.isEmpty(key)) {
                jsonCooker.put(key, value);
            }
        }
        return jsonCooker;
    }
    
    public JSONObject generateBody(JSONObject object) {
        jsonBody.clear();
        for(String key : object.keySet()) {
            String value = object.getString(key);
            if(!StringUtils.isEmpty(key)) {
                jsonBody.put(key, value);
            }
        }
        jsonBody = object;
        return jsonBody;
    }
    
    public String generateUrl(String strUrl) {
        url = strUrl;
        return url;
    }
    
    public String formPost() {
        Connection conn = Jsoup.connect(url);
        conn.ignoreContentType(true);
        conn.method(Method.POST);
        conn.followRedirects(true);
        //设置头部
        conn.headers(jsonHeader);
        //设置请求内容
        conn.data(jsonData);
        //body
        conn.requestBody(JSON.toJSONString(jsonBody));
        //cookie
        conn.cookies(jsonCooker);
        String resp = "操作失败";
        try {
            Response response = conn.timeout(600).execute();
            resp = response.body();
        } catch (Exception e) {
            log.debug(e.getLocalizedMessage()+jsonData.toString());
            // TODO Auto-generated catch block
//            logger.error(ExceptionUtils.getStackTrace(e));    
        }
        return resp;
    }
}

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

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

相关文章

Linux常用命令——umask命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) umask 用来设置限制新建文件权限的掩码 补充说明 umask命令用来设置限制新建文件权限的掩码。当新文件被创建时&#xff0c;其最初的权限由文件创建掩码决定。用户每次注册进入系统时&#xff0c;umask命令都被…

大数据技术架构(组件)——Hive:流程剖析1

1.1、流程剖析大致流程&#xff1a;1、客户端连接到HS2(HiveServer2&#xff0c;目前大多数通过beeline形式连接&#xff0c;Hive Cli模式相对较重&#xff0c;且直接略过授权访问元数据),建立会话2、提交sql&#xff0c;通过Driver进行编译、解析、优化逻辑计划&#xff0c;生…

OCR识别

阿里云和百度云识别&#xff0c;京东智能识别。 图片识别需求 1&#xff0c;拿到一个文件&#xff0c;2&#xff0c;变成InputStream 3&#xff0c;base64编码将流解析下载&#xff0c; 4 调用方法识别 1.身份证 2&#xff0c;行驶证 3&#xff0c;驾驶证 FileUtils file…

Elasticsearch:通过例子快速入门

Elasticsearch 是业界最流行的开源企业搜索引擎&#xff0c;应用广泛。 在我们的手机里的 App 背后的搜索引擎好多都是 Elasticsearch&#xff0c;比如我们熟知的抖音&#xff0c;滴滴&#xff0c;美团&#xff0c;携程&#xff0c;点评&#xff0c;银行 app&#xff0c;保险&a…

ssh反向代理实现内网穿透【亲测可用】

常用内网穿透方式 1、网卡层映射&#xff0c;包括购买公网ip 推荐指数&#xff1a;&#x1f44d;&#x1f3fb;&#x1f44d;&#x1f3fb;&#x1f44d;&#x1f3fb;&#x1f44d;&#x1f3fb;&#x1f44d;&#x1f3fb;。 缺点&#xff1a;主要申请困难。 2、自己搭建内网…

JavaWeb-HTTPTomcatServlet

JavaWeb-HTTP&Tomcat&Servlet 1&#xff0c;Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 在我们日常的生活中&#xff0c;经常会使用浏览器去访问百度、京东、传智官网等这些网站&#xf…

韩顺平老师的linux基础课(复习笔记)

今天听了韩老师的课程&#xff0c;深受启发啊&#xff01;&#xff01;&#xff01; 卖油翁的“我亦无他&#xff0c;唯手熟尔”&#xff0c;只是手法熟练罢了&#xff01;&#xff01; 还有老黄牛的坚持&#xff0c;别人把时间都放在努力上&#xff0c;而我把时间放在选择上&a…

微信小程序分类菜单激活状态跟随列表滚动自动切换

这里主要用到微信小程序提供的SelectorQuery获取页面节点信息实现&#xff0c;组件用的是微信小程序的scroll-view 逻辑就是获取右侧盒子的节点信息&#xff0c;获取右侧子分类的节点信息&#xff0c;当子分类滑动到顶部的之后&#xff0c;则切换左侧分类状态&#xff0c;而且当…

【java】冒泡排序/选择排序/希尔排序

文章目录排序分类/排序算法的分类冒泡排序代码1&#xff1a;代码2&#xff08;优化代码3&#xff08;算法优化 --当次排序没有进行交换则退出循环代码4&#xff08;封装为方法代码5&#xff08;检测冒泡排序时间复杂度选择排序代码1代码2&#xff08;优化算法代码3&#xff08;…

FinalShell的下载安装简单使用

目录 一、下载 二、安装 三、简单使用 一、下载 下载地址&#xff1a;SSH工具 SSH客户端 1、进去后选择第一个 FinalSheel SSH工具,远程桌面加速软件,支持Windows,macOS,Linux,版本3.9.7,更新时间2022.10.26&#xff1b; 2、选择需要的版本下载&#xff0c;我选择的是&…

80. 循环神经网络的简洁实现

虽然从零开始实现循环神经网络对了解循环神经网络的实现方式具有指导意义&#xff0c;但并不方便。 本节将展示如何使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型。 我们仍然从读取时光机器数据集开始。 import torch from torch import nn from torch.nn i…

【SpringCloud13】SpringCloud Config分布式配置中心

1.概述 1.1 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务&#xff0c;每个服务的粒度相对较小&#xff0c;因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行&#xff0c;所以一套集中式的、动态的配置管理设施是必不…

PointNext论文解读

论文地址&#xff1a;https://arxiv.org/abs/2206.04670 github地址&#xff1a;GitHub - guochengqian/PointNeXt: [NeurIPS22] PointNeXt: Revisiting PointNet with Improved Training and Scaling Strategies 本文主要提出优化PointNet的两大关键点. 1) 好的训练策略 2…

如何搭建一个专业的知识库

当客户跟你达成合作关系后&#xff0c;需要持续的关系维护&#xff0c;在一定的销售点&#xff0c;定期和客户沟通&#xff0c;据调查&#xff0c;赢得一个新客户的成本可能是保留一个现有客户的5到25倍&#xff0c;作为营销策略&#xff0c;客户服务支持必须满足他们的期望。建…

[BJDCTF2020]Easy MD5(浅谈PHP弱类型hash比较缺陷)

目录 信息收集 构造payload PHP弱类型hash比较缺陷 0e碰撞 数组MD5 总结 信息收集 看题目应该和MD5加密相关 select * from admin where passwordmd5($pass,true) PHP的MD5函数 string必需。规定要计算的字符串。raw 可选。规定十六进制或二进制输出格式&#xff1a; …

2023-01-17 PostgreSQL 并行查询概述

简介&#xff1a; 大数据时代&#xff0c;人们使用数据库系统处理的数据量越来越大&#xff0c;请求越来越复杂&#xff0c;对数据库系统的大数据处理能力和混合负载能力提出更高的要求。PostgreSQL 作为世界上最先进的开源数据库&#xff0c;在大数据处理方面做了很多工作&…

详谈ORB-SLAM2的单目初始化器Initializer

单目初始化器Initializer类&#xff0c;这个类只用于单目初始化&#xff0c;因为这是ORB-SLAM里遗留的一个类&#xff0c;也是祖传代码&#xff0c;双目和RGBD相机只需要一帧就能初始化&#xff0c;因为双目和RGBD相机拍到的点都是有信息的&#xff0c;但是单目相机就不一定了&…

六种方法在云平台和远程桌面中使用Kali

一、说明 本篇主要介绍方便在云服务器&#xff0c;或者以远程桌面&#xff08;GUI&#xff09;形式使用kali配置教程&#xff0c;帮助渗透更加方便顺利。 二、方法 2.1 方法一 云服务提供商预装 备注&#xff1a;预算充足&#xff0c;可以首考虑此方法 优点&#xff1a; 云服…

java 探花交友项目实战 day3 完善个人信息 阿里云OSS文件存储 百度人脸识别

完善用户信息 业务概述 阿里云OSS Data ConfigurationProperties(prefix "tanhua.oss") public class OssProperties { private String accessKey; private String secret; private String bucketName; private String url; //域名 private Strin…

微分方程的特征值解法:斯图姆-刘维尔方程

一.基础概念 前置:福克斯定理和奇点理论 常点的级数解 奇异点的级数解 则至少存在一个如下形式的解(弗罗贝尼乌斯级数): 19世纪中期,常微分方程的研究到了新的阶段,存在定理和斯图姆-刘维尔理论都假设微分方程区域内含解析函数或至少包含连续函数,而另一方面,以前研究…