NIFI使用InvokeHTTP发送http请求

说明

这里介绍四种平时常用的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请求,测试的代码不涉及业务逻辑,只是简单用来配合测试处理器使用。

java 复制代码
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的使用,如果有问题欢迎大家评论。

相关推荐
青灯文案11 小时前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
小林熬夜学编程2 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
njnu@liyong13 小时前
图解HTTP-HTTP报文
网络协议·计算机网络·http
ZachOn1y14 小时前
计算机网络:应用层 —— 应用层概述
计算机网络·http·https·应用层·dns
Graceful_scenery1 天前
https双向认证
服务器·网络·网络协议·http·https
njnu@liyong1 天前
图解HTTP-HTTP状态码
网络协议·计算机网络·http
代码洁癖症患者2 天前
HTTP请求的奇幻旅程:从发起至响应的全方位探索
网络·网络协议·http
寻找沙漠的人2 天前
HTTP—02
网络·网络协议·http
范紫涵-19期-工职大2 天前
前端HTTP协议传输以及背后的原理总结
网络·网络协议·http
龙少95432 天前
【Http,Netty,Socket,WebSocket的应用场景和区别】
java·后端·websocket·网络协议·http