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

相关文章

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

springboot家政服务管理平台 LW +PPT+源码+讲解

3系统的可行性研究及需求分析 3.1可行性研究 3.1.1技术可行性分析 经过大学四年的学习,已经掌握了JAVA、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本家政服务管理平台采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;可以与Mysql数据库进行无缝连接。 所以,家政服务管理平台在技术上是可以实施的。 3.1

基于Java医院药品交易系统详细设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W+,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码+数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人  Java精品实战案例《600套》 2023-2025年最值得选择的Java毕业设计选题大全:1000个热

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

微服务中RPC的强类型检查与HTTP的弱类型对比

在微服务架构中,服务间的通信是一个至关重要的环节。其中,远程过程调用(RPC)和HTTP是两种最常见的通信方式。虽然它们都能实现服务间的数据交换,但在类型检查方面,RPC的强类型检查和HTTP的弱类型之间有着显著的差异。本文将深入探讨这两种通信方式在类型检查方面的优缺点,以及它们对微服务架构的影响。 一、RPC的强类型检查 RPC的强类型检查是其核心优势之一。在RPC通信中,客户端和服务端都使

el-upload 上传图片及回显照片和预览图片,文件流和http线上链接格式操作

<div v-for="(info, index) in zsjzqwhxqList.helicopterTourInfoList" :key="info.id" >编辑上传图片// oss返回线上地址http链接格式:<el-form-itemlabel="巡视结果照片":label-width="formLabelWidth"><el-upload:action="'http:

从《深入设计模式》一书中学到的编程智慧

软件设计原则   优秀设计的特征   在开始学习实际的模式前,让我们来看看软件架构的设计过程,了解一下需要达成目标与需要尽量避免的陷阱。 代码复用 无论是开发何种软件产品,成本和时间都最重要的两个维度。较短的开发时间意味着可比竞争对手更早进入市场; 较低的开发成本意味着能够留出更多营销资金,因此能更广泛地覆盖潜在客户。 代码复用是减少开发成本时最常用的方式之一。其意图

Transformers和Langchain中几个组件的区别

1.对于Transformers框架的介绍 1.1 介绍: transformers 是由 Hugging Face 开发的一个开源库,它提供了大量预训练模型,主要用于自然语言处理(NLP)任务。这个库提供的模型可以用于文本分类、信息抽取、问答、文本生成等多种任务。 1.2 应用场景: 文本分类:使用 BERT、RoBERTa 等模型进行情感分析、意图识别等。命名实体识别(NER):使用序列

[大师C语言(第三十六篇)]C语言信号处理:深入解析与实战

引言 在计算机科学中,信号是一种软件中断,它允许进程之间或进程与内核之间进行通信。信号处理是操作系统中的一个重要概念,它允许程序对各种事件做出响应,例如用户中断、硬件异常和系统调用。C语言作为一门接近硬件的编程语言,提供了强大的信号处理能力。本文将深入探讨C语言信号处理的技术和方法,帮助读者掌握C语言处理信号的高级技巧。 第一部分:C语言信号处理基础 1.1 信号的概念 在Unix-lik