NIFI使用InvokeHTTP发送http请求

news2024/10/5 23:28:53

说明

这里介绍四种平时常用的http请求方法:GET、POST、PUT、DELETE。

在官方的介绍文档中关于InvokeHTTP处理器的描述是这么说的:

An HTTP client processor which can interact with a configurable HTTP Endpoint. The destination URL and HTTP Method are configurable. FlowFile attributes are converted to HTTP headers and the FlowFile contents are included as the body of the request (if the HTTP Method is PUT, POST or PATCH).

大致意思是说:这是一个可以与 HTTP 端点交互的 HTTP 客户端处理器。处理器中的 URL 和 HTTP Method是可以配置的。处理器中的属性会转换为 HTTP的请求头,如果请求方法是 PUT、POST 或 PATCH那么处理器的内容将作为请求的正文(请求体)包含在内。


测试接口

这里给了几个处理器测试用到的接口,主别对应GET、POST、PUT、DELETE请求,测试的代码不涉及业务逻辑,只是简单用来配合测试处理器使用。

package com.example.common.resp;

import com.example.common.enums.RespEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


@AllArgsConstructor
@NoArgsConstructor
@Data
public class Result {
    private Integer code;
    private String message;
    private Object data;


    // 省略部分代码。。。

    public static Result ok(Object data) {
        return ok(RespEnum.SUCCESS.getCode(), RespEnum.SUCCESS.getMessage(), data);
    }

}



=====================================================================================
测试接口
=====================================================================================



package com.example.redis.controller;

import com.alibaba.fastjson2.JSONObject;
import com.example.common.resp.Result;
import org.springframework.web.bind.annotation.*;

import java.util.Map;


@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("/{id}")
    public Result getById(@PathVariable String id, @RequestParam Map<String, Object> query) {
        JSONObject res = new JSONObject();
        res.put("method", "GET");
        res.put("desc", "这个是get方法");
        res.put("id", id);
        res.put("query", query);
        return Result.ok(res);
    }

    @PostMapping("")
    public Result add(@RequestBody JSONObject body) {
        JSONObject res = new JSONObject();
        res.put("method", "POST");
        res.put("desc", "这个是post方法");
        res.put("body", body);
        return Result.ok(res);
    }

    @PutMapping("/{id}")
    public Result editById(@PathVariable String id, @RequestBody JSONObject body) {
        JSONObject res = new JSONObject();
        res.put("method", "PUT");
        res.put("desc", "这个是put方法");
        res.put("id", id);
        res.put("body", body);
        return Result.ok(res);
    }

    @DeleteMapping("/{id}")
    public Result deleteById(@PathVariable String id) {
        JSONObject res = new JSONObject();
        res.put("method", "DELETE");
        res.put("desc", "这个是delete方法");
        res.put("id", id);
        return Result.ok(res);
    }
}

发送GET请求

添加处理器:InvokeHTTP

点击工具栏左上角的Processor拖拽到画布中,筛选出InvokeHTTP处理器添加到画布中

配置处理器

双击添加的处理器,切换到SETTINGS,给处理器起个名字

起好名字后切换到PROPERTIES,配置以下内容,最后点击APPLY

添加自定义请求头

如果需要给请求头添加自定义属性的话,直接点击右上角的加号+添加即可,例如我这里添加一个myToken的请求头,这个时候发送的请求头里面便会携带该参数

测试处理器

方便测试,将InvokeHTTP处理器设置为10秒执行一次

同理添加LogAttribute处理器到画布中

修改LogAttribute处理器的配置,将PROPERTIES选项卡中Log Payload的属性值改为true

连接两个处理器,关联关系选择Response,最后点击ADD

将第一个InvokeHTTP处理器自身的RELATIONSHIPS除了Response之外全部选择terminate

将第二个LogAttribute处理器自身的的RELATIONSHIPS选择terminate

处理器全部显示如图所示则表示没问题,可以运行了

启动两个处理器,在画布空白位置鼠标右键,选择Start

在nifi的日志中可以看到每隔十秒钟便会打印一次接口返回的结果

发送POST请求

发送POST请求携带请求体数据我们需要借助另外一个处理器:GenerateFlowFile

添加处理器:GenerateFlowFile

配置处理器

双击添加的处理器,在SETTINGS选项卡中给处理器起个名称

切换到PROPERTIES选项卡,然后分别配置Custom Text和Mime Type两个属性的值,其他属性的值默认即可。

Custom Text:(官方解释)If Data Format is text and if Unique FlowFiles is false, then this custom text will be used as content of the generated FlowFiles and the File Size will be ignored。通俗的说就是如果Custom Text中的值是文本类型的并且Unique FlowFiles属性的值是false,则Custom Text中的值会当做流文件的内容,这样Custom Text中的值传到下一个处理器InvokeHTTP的时候便会作为请求体数据传到接口中。

添加处理器:InvokeHTTP

和发送GET请求一样,添加InvokeHTTP处理器,然后配置以下内容,post请求中的请求体来自于上一个处理器的内容

测试处理器

将第一个处理器GenerateFlowFile和第二个处理器InvokeHTTP连接,关联关系选择success

继续将第二个处理器InvokeHTTP和之前添加过的LogAttribute处理器进行连接,关联关系选择Response

同样的将InvokeHTTP处理器自身的RELATIONSHIPS除了Response之外全部选择terminate

同样的方便测试,将第一个处理器GenerateFlowFile设置为10秒执行一次,然后将POST方法对应的三个处理器分别启动(鼠标放到对应的处理器上然后右键选择Start启动)

查看nifi的日志,可以看到每隔十秒钟便会打印一次接口返回的结果

发送PUT请求

put请求和post请求是类似,处理器按照post请求的重新添加一遍即可,只需要将InvokeHTTP处理器里面的请求方法改为PUT,URL改为对应的请求路径即可。这里不再重复添加,下面是添加好之后的

测试结果

发送DELETE请求

put请求和get请求是类似,处理器按照get请求的重新添加一遍即可,只需要将InvokeHTTP处理器里面的请求方法改为DELETE,URL改为对应的请求路径即可。这里不再重复添加,下面是添加好之后的

测试结果

 结束语

以上便是NIFI中关于InvokeHTTP的使用,如果有问题欢迎大家评论。

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

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

相关文章

java 企业工程管理系统软件源码 自主研发 工程行业适用

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…

网工内推 | 云架构运维、网络工程师,base北京,最高20k

01 协合新能源 招聘岗位&#xff1a;IT运维工程师 职责描述&#xff1a; 1、对集团内使用云计算架构&#xff08;Kubernetes&#xff09;的系统进行规划、运维及管理相关工作。 2、对集团数据中心系统的大数据基础架构&#xff08;Cloudera Distribution Hadoop&#xff09;的…

【办公类-16-06】20230901大班运动场地分配表-斜线排列、5天循环、不跳节日,手动修改节日”(python 排班表系列)

背景需求&#xff1a; 大班组长发来一个“运动排班”的需求表&#xff1a;“就是和去年一样的每个班的运动排班&#xff0c;就因为今年大班变成7个班&#xff0c;要重新做一份&#xff0c;不然我就用去年的那份了&#xff08;8个大班排班&#xff09;” &#xff08;拆了中8班…

STM32定时器的One Pulse Mode,OPM应用

文章目录 OPM应用1-精准延时应用2-精准定时 OPM T IMx_CR1的OPM位 位 3 OPM&#xff1a;单脉冲模式 (One-pulse mode) 0&#xff1a;计数器在发生更新事件时不会停止计数 1&#xff1a;计数器在发生下一更新事件时停止计数&#xff08;将 CEN 位清零&#xff09; 应用1-精准延时…

光学显微镜算法(OMA)(含MATLAB代码)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

期权开户必读:费用、保证金和稳定性安全性必须兼备

期权开户的核心是判断50ETF方向&#xff0c;上涨下跌都能赚钱&#xff0c;其次选择0门槛期权平台要考量期权手续费和安全性是第一位&#xff0c;下文为大家科普期权开户的核心&#xff1a;费用、保证金和稳定性安全性必须兼备的知识点。本文来自 &#xff1a;期权酱 一、期权开…

如何把Android Framework学彻底?一条龙学习

Framework通俗易懂 平时学习 Android 开发的第一步就是去学习各种各样的 API&#xff0c;如 Activity&#xff0c;Service&#xff0c;Notification 等。其实这些都是 Framework 提供给我们的。Framework 层为开发应用程序提供了非常多的API&#xff0c;我们通过调用这些 API …

自然语言处理——数据清洗

一、什么是数据清洗 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序&#xff0c;包括检查数据一致性&#xff0c;处理无效值和缺失值等。与问卷审核不同&#xff0c;录入后的数据清理一般是由计算机而不是人工完成。 ——百度百科 二、为什么要数据清洗 现实生…

Apipost:你API管理中的得力助手

API管理的难点在哪&#xff1f; 相信无论是前端&#xff0c;还是后端的测试和开发人员&#xff0c;都遇到过这样的困难。不同工具之间数据一致性非常困难、低效。多个系统之间数据不一致&#xff0c;导致协作低效、频繁出问题&#xff0c;开发测试人员痛苦不堪。 开发人员在 …

STM32F4X RTC

STM32F4X RTC 什么是RTCSTM32F4X RTCSTM32F4X RTC框图STM32F4X RTC计数频率STM32F4X RTC日历STM32F4X RTC闹钟 STM32F4X RTC例程 什么是RTC RTC全程叫Real-Time Clock实时时钟&#xff0c;是MCU中一个用来计时的模块。RTC的一个主要作用是用来显示实时时间&#xff0c;就像日常…

Visual Studio 2019下使用C++与Python进行混合编程——环境配置与C++调用Python API接口

前言 在vs2019下使用C与Python进行混合编程,在根源上讲&#xff0c;Python 本身就是一个C库&#xff0c;那么这里使用其中最简单的一种方法是把Python的C API来嵌入C项目中&#xff0c;来实现混合编程。当前的环境是&#xff0c;win10,IDE是vs2019,python版本是3.9&#xff0c…

一个帮各位填秋招表格省一点事的浏览器插件

最近应该很多和我一样的双非鼠鼠在秋招等面试&#xff0c;而且处于海投阶段&#xff0c;为了不忘记投了哪些公司&#xff0c;可以用这样一个表格来记录&#xff1a; 其中有些字段&#xff0c;比如状态、投递时间、查看进度的网址其实可以不手动输入&#xff0c;所以搞个插件来…

2023数模国赛C 题 蔬菜类商品的自动定价与补货决策-完整版创新多思路详解(含代码)

题目简评&#xff1a;看下来C题是三道题目里简单一些的&#xff0c;考察的点比较综合&#xff0c;偏数据分析。涉及预测模型和运筹优化(线性规划)&#xff0c;还设了一问开放型问题&#xff0c;适合新手入门&#xff0c;发挥空间大。 题目分析与思路&#xff1a; 背景&#x…

部署zookeeper集群

zookeeper和jdk下载地址 jdk 链接&#xff1a;https://pan.baidu.com/s/13GpNaAiHM5HSDJ66ebBtEg 提取码&#xff1a;90se zookeeper 链接&#xff1a;https://pan.baidu.com/s/1nSFKEhSGNiwgSPZWdb7hkw 提取码&#xff1a;u5l2 在所有的机器上面执行下面步骤&#xff1a; 1.上…

C++的纯虚函数和抽象类

在C++中,可以将虚函数声明为纯虚函数,语法格式为: virtual 返回值类型 函数名 (函数参数) = 0; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。 最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。…

继承的偏移量问题

下面是实际测试&#xff1a; p1 p3 ! p2 Base1* p1 &d; Derive* p3 &d;! Base2* p2 &d; 图解&#xff1a;

斯坦福小镇升级版——AI-Town搭建指南

导语&#xff1a; 8月份斯坦福AI小镇开源之后&#xff0c;引起了 AIGC 领域的强烈反响&#xff0c;但8月份还有另一个同样非常有意义的 AI-Agent 的项目开源&#xff0c;a16z主导的 AI-Town 本篇文章主要讲解如何搭建该项目&#xff0c;如有英文基础或者对这套技术栈熟悉&#…

监控系统prometheus部署

wget -c https://github.com/prometheus/prometheus/releases/downloa d/v2.37.1/prometheus-2.37.1.linux-amd64.tar.gz下载必要的组件。 mkdir -p /opt/prometheus创建目录。 此文章为9月Day 8学习笔记&#xff0c;内容来源于极客时间《运维监控系统实战笔记》。

docker安装开发常用软件MySQL,Redis,rabbitMQ

Docker安装 docker官网&#xff1a;Docker: Accelerated Container Application Development docker镜像仓库&#xff1a;https://hub.docker.com/search?qnginx 官网的安装教程&#xff1a;Install Docker Engine on CentOS | Docker Docs 安装步骤 1、卸载以前安装的doc…

Reqable项目技术栈全方面总结

大家好&#xff0c;最近有知乎网友问我Reqable技术选型的问题&#xff0c;恰好Reqable也刚刚发布了非常重要的1.3版本更新&#xff0c;所以此次写一篇关于Reqable项目技术栈的全方面总结。 本篇文章的目的&#xff0c;是向大家分享我关于Reqable项目的一些技术思考、细节和填坑…