第八节:深入讲解SMB中的Http组件

一、概述

Http组作是SMB中的核心组件之一,在第七节中讲解了如何简洁的进行web程序部署和运行,这只是它的功能之一。在本节中,我们将介绍Http组件的重要属性。

二、请求头Request

1、支持方法

支持POST、GET、PUT、DELETE、OPTIONS等方法,支持较广的应用场景。

2、请求头

在实际开发中,需要通过请求header来提交一些重要的参数,接下来将展示在Http组件中如何获取。我们建立了一个简单的消息流:

在java计算组件中进行header获取:

package sashulin.apps;
import sashulin.Models.MessageModel;
import sashulin.applications.FlowApi;
import org.json.JSONArray;
import org.json.JSONObject;
import java.sql.*;
import java.util.Map;
public class httpFlow_JavaCompute1 {

	private String routeLabels = "";
	public String execute(MessageModel messageModel,String message) throws Exception{
		//获取请求头信息
		for(Object key : messageModel.flowRequestHeader.keySet()) {
            System.out.println("key:" + key.toString() + ",vaule:" + messageModel.flowRequestHeader.get(key));
     }

		System.out.println("参数:");
		//获取提交的url中的参数
		for(Object key : messageModel.params.keySet()) {
            System.out.println("key:" + key.toString() + ",vaule:" + messageModel.params.get(key));
     }

		System.out.println(message);
		JSONObject n = null;
		JSONObject input = new JSONObject();
		input.put("arg0","11122");
		String res = FlowApi.execute(this,"WebServiceOut1",n,input.toString());
		
		res = res.trim();
		return res;
	}
	
	public String getRouteLabels(){
		return routeLabels;
	}
	

}

在代码中我们可以看到:

messageModel.flowRequestHeader中包含了全部的请求头,通过遍历,将所有kv打印出来。

结果:

key:Sec-ch-ua-mobile,vaule:?0

key:Sec-fetch-site,vaule:none

key:Sec-fetch-dest,vaule:document

key:Sec-ch-ua,vaule:"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"

key:User-agent,vaule:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

key:Accept,vaule:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

key:Host,vaule:127.0.0.1:9003

key:Upgrade-insecure-requests,vaule:1

key:Sec-fetch-mode,vaule:navigate

key:Accept-language,vaule:zh-CN,zh;q=0.9

key:Connection,vaule:keep-alive

key:remoteAddress,vaule:localhost

key:Accept-encoding,vaule:gzip, deflate, br

key:method,vaule:GET

key:Sec-fetch-user,vaule:?1

key:Sec-ch-ua-platform,vaule:"macOS"

三、请求参数

不管是GET还是POST,在URL中带有参数都会在messageModel.params中获取到。

//获取提交的url中的参数
for(Object key : messageModel.params.keySet()) {
    System.out.println("key:" + key.toString() + ",vaule:" +
messageModel.params.get(key));
}

打印结果:

参数:

key:name,vaule:roy

key:company,vaule:yiji

四、返回Response

1、场景设计

1)、在消息流中调用另一个api,这个Api叫test,在提交给这个Api的时候要增加一个header,这个header名叫myHeaderName,值为hello Http

2)、调用完test这个Api后,要获取这个Api返回header中的某个数据。并打印这个api所有的header

3)、在当前消息流中增加Response Header,键值为:aaa:123333

流程设计如图:

httpOut1是调用test api的组件。

调用test api前的代码是:

package sashulin.apps;
import sashulin.Models.MessageModel;
import sashulin.applications.FlowApi;
import org.json.JSONArray;
import org.json.JSONObject;
import java.sql.*;
public class httpFlow_JavaCompute3 {

	private String routeLabels = "";
	public String execute(MessageModel messageModel,String message){
		messageModel.flowResponseHeader.clear();
		messageModel.setHttpOutRequestHeader("HttpOut1","myHeaderName","hello Http.");
		return message;
	}
	
	public String getRouteLabels(){
		return routeLabels;
	}
	

}

最终返回的response的代码是:

package sashulin.apps;
import sashulin.Models.MessageModel;
import sashulin.applications.FlowApi;
import org.json.JSONArray;
import org.json.JSONObject;
import java.sql.*;
import java.util.HashMap;
public class httpFlow_JavaCompute4 {

	private String routeLabels = "";
	public String execute(MessageModel messageModel,String message){
		String headerValue = messageModel.getHttpOutResponseHeader("HttpOut1","Access-control-allow-headers");
		System.out.println("获取某个头Access-control-allow-headers:"+headerValue);
		System.out.println("获取返回头:");
		HashMap<String,Object>  myHeaders =  messageModel.getHttpOutResponseHeaders("HttpOut1");
		for(Object key : myHeaders.keySet()) {
            System.out.println("key:" + key.toString() + ",vaule:" + myHeaders.get(key));
    }
		//增加返回参数
		messageModel.flowResponseHeader.put("aaa","123333");
		return "Compute1:"+message;
	}
	
	public String getRouteLabels(){
		return routeLabels;
	}
	

}

2、测试结果

总结:这种场景一般用于ESB平台,ESB中代理其他系统的接口,进行接口转调,然后再返回给请求方。

五、url中使用变量

将HttpUrlPattern组件的属性设置为带变量的url,如图:

编译、运行结果:

六、url中使用 *

运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI数字人“搅局”直播电商

现如今&#xff0c;直播带货已然成为了备受消费者欢迎的一种新的购物模式&#xff0c;人们已经愈发习惯在直播间购物了。在直播带货热度居高不下背后&#xff0c;除了低价优势之外&#xff0c;还在于直播带货所具备的实时互动、全方位展示能够为消费者带去更加真实、直观、沉浸…

Java集合框架初学者指南:List、Set与Map的实战训练

Java集合框架是Java语言的核心部分&#xff0c;它提供了丰富的类和接口&#xff0c;用来高效地管理和操作大量数据。这个强大的工具箱包括多种集合类型&#xff0c;其中最为常用的是List、Set和Map。 1.List - 有序且可重复的数据清单 概念&#xff1a; List就像一个购物清单&…

python usb与下位机 硬件通信

需求分析 上周接到一个需求 用usb和硬件连接 轮询读取usb中指定功能码的指定个数的数据并生成一个桌面程序 刚接到这个需求时 我第一时间想到的就是使用python去尝试 期间也踩了很多的坑 第一版效果如下 特此记录 环境搭建 首先第一点就是将所需要的库进行安装 这里是我这…

Springboot2 restTemplate 使用UriComponentsBuilder时编码问题

文章目录 简要说明maven依赖样例代码 简要说明 在使用springboot2的restTemplate配合UriComponentsBuilder&#xff0c;UriComponentsBuilder拿到uri字符串时有编码过程&#xff0c;而restTemplate在execute时&#xff0c;底层也是有encode编码&#xff0c;这样就到时了双重编…

基于ssm的校园驿站管理系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对校园快递信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

详解机器学习概念、算法

目录 前言 一、常见的机器学习算法 二、监督学习和非监督学习 三、常见的机器学习概念解释 四、深度学习与机器学习的区别 基于Python 和 TensorFlow 深度学习框架实现简单的多层感知机&#xff08;MLP&#xff09;神经网络的示例代码&#xff1a; 欢迎三连哦&#xff01; 前言…

LeetCode 1027——最长等差数列

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 假设我们以 f[d][nums[i]]表示以 nums[i] 为结尾元素间距为 d 的等差数列的最大长度&#xff0c;那么&#xff0c;如果 nums[i]-d 也存在于 nums 数组中&#xff0c;则有&#xff1a; f [ d ] [ n u m s [ i ] ] …

我们是如何测试人工智能的(八)包含大模型的企业级智能客服系统拆解与测试方法 -- 大模型 RAG

大模型的缺陷 -- 幻觉 接触过 GPT 这样的大模型产品的同学应该都知道大模型的强大之处&#xff0c; 很多人都应该调戏过 GPT&#xff0c;跟 GPT 聊很多的天。 作为一个面向大众的对话机器人&#xff0c;GPT 明显是鹤立鸡群&#xff0c;在世界范围内还没有看到有能跟 GPT 扳手腕…

武汉星起航引领跨境电商新纪元,助力卖家扬帆远航全球市场

在全球化的商业浪潮中&#xff0c;跨境电商行业异军突起&#xff0c;成为连接全球市场的重要纽带。亚马逊&#xff0c;作为全球零售电商的巨擘&#xff0c;为无数卖家提供了走向国际市场的广阔舞台。在这片充满机遇与挑战的蓝海中&#xff0c;武汉星起航电子商务有限公司以其独…

数字孪生技术在农业领域的应用

数字孪生技术在农业领域的应用&#xff0c;不仅能够提高农业生产的智能化水平&#xff0c;还能够促进农业资源的高效利用和农业环境的可持续发展。随着技术的不断进步和应用的深入&#xff0c;数字孪生将在农业领域发挥越来越重要的作用。数字孪生技术在农业领域的应用主要集中…

redis连接工具 windows版安装和redis命令

Redis是一个开源的使用C语言编写、支持网络、基于内存、可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 一、redis-windows版安装 在D盘符下新建个目录&#xff0c;把下载的绿色安装包放在该目录。 D:\Files Java\Redis-x64-3.2.100 解压到当前目录 …

跳蚱蜢(蓝桥杯)

文章目录 跳蚱蜢题目描述答案&#xff1a;20bfs 跳蚱蜢 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 如下图所示&#xff1a; 有 9 只盘子&#xff0c;排成 1 个圆圈。 其中 8 只盘子内装着 8 只蚱蜢&#xff…

【单例测试】Mockito实战

目录 一、项目介绍二、业务代码2.1 导入依赖2.2 entity2.3 Dao2.4 业务代码 三、单元测试3.1 生成Test方法3.2 引入测试类3. 3 测试前准备3.4 测试3.4.1 name和phone参数校验3.4.2 测试数据库访问 3.4.3 数据库反例 总结 前面我们提到了《【单元测试】一文读懂java单元测试》 简…

【Redis教程0x04】详解Redis的4个高级数据类型

引言 在【Redis教程0x03】中&#xff0c;我们介绍了Redis中常用的5种基础数据类型&#xff0c;我们再来回顾一下它们的使用场景&#xff1a; String&#xff1a;存储对象、url、计数、分布式锁&#xff1b;List&#xff1a;消息队列&#xff1b;Hash&#xff1a;存储对象、购…

【Arxml专题】-29-使用Cantools将CAN Matrix Arxml自动生成C语言代码

目录 1 安装Python和Cantools 1.1 查看Python已安装的Package包 1.2 在Python中安装Cantools插件包 1.3 获取更多Cantools工具的更新动态 2 CAN Matrix Arxml自动生成C语言代码 2.1 批处理文件CAN_Matrix_Arxml_To_C.bat内容说明 2.2 CAN Matrix Arxml文件要求 2.3 如何…

JAVA 学习记录(1)

1.函数 (1)String.join(";", messages); ";" 表示分隔符&#xff0c;输出的结果&#xff1a; message; (2) Double.parseDouble(valueString); 它返回由字符串参数表示的双精度值。 (3) Double.valueOf((Float) value; float 类型的数值转化为double类…

UG NX二次开发(C#)-通过曲线组生成NURBS曲面

文章目录 1、前言2、UG NX中通过曲线组生成NURBS曲面的操作3、采用NXOpen C#方法的源代码1、前言 在UG NX中,曲线、曲面的操作使用比较多,对于创建NURBS曲面,可以通过曲线组来生成,本文以NXOpen C#的方法实现通过曲线组生成NURBS曲面的功能。对于UG NX二次开发感兴趣或者有…

-bash: ./1.sh: /bin/bash^M: bad interpreter: No such file or directory解决方法

1、执行脚本 ./1.sh时报如下错误 -bash: ./1.sh: /bin/bash^M: bad interpreter: No such file or directory 2、在Windows编辑的脚本导入Linux系统中&#xff0c;执行报错问题 yum install -y dos2unix 3、或者本地安装 rpm -ivh /mnt/Packages/dos...... 4、然…

springboot 中Aop注解切面实现收集日志与统计耗时2

一 Aop注解实现切面 1.1 工程结构 Before&#xff1a;前置通知, 在方法执行之前执行 Aroud&#xff1a;环绕通知, 围绕着方法执行 After&#xff1a;后置通知, 在方法执行之后执行 AfterReturning&#xff1a;返回通知, 在方法返回结果之后执行 AfterThrowing&#xff1a;异…

【软考高项】十七、项目管理概论之项目基本要素

1、项目基础 项目具备的一些要素&#xff1a; 1&#xff09;独特的产品、服务或成果 开展项目是为了通过可交付成果达成目标。 ◆ 目标 是所指向的结果、要取得的战略地位、要达到的目的、要获得的成果、要生产 的产品或者要提供的服务 ◆ 可交付成果 是指在某一过程、阶…