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

2024-03-21 17:04

本文主要是介绍第八节:深入讲解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中使用 *

运行结果:

这篇关于第八节:深入讲解SMB中的Http组件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/833288

相关文章

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb