第八节:深入讲解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

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (