NiFi ListenHTTP 处理器:如何指定 "allow post"?

NiFi ListenHTTP processor: how to specify "allow post"?

刚开始使用 nifi。 有一个 "ListenHTTP" 类型的 http 处理器没有监听端口 9090 需要在 http://localhost:9090/ 端点上允许 http POST 我无法在 Web UI 中找到此处理器的任何 "acceptable http verbs" 设置,所以我的猜测是 - 它需要在某种配置文件中指定。 我的问题是:那是什么文件,指定它的实际语法是什么? 我在网上看到了一些 xml 模板,但我不确定该放在哪里。

我相信默认情况下它会接受所有动词。我在端口 9090 上配置了一个空 "Base Path" 属性 的 ListenHttp,并且能够成功地使用 curl 向它发送 POST 数据。您遇到了什么样的问题?

默认情况下,如果没有指定替代的基本名称,ListenHTTP 处理器的端点可在:

http://{hostname}:{port}/contentListener

因此,对于默认设置,您的请求应该是:

curl --data "param1=value1&param2=value2" localhost:9090/contentListener

有关处理器的完整文档可在 ListenHTTP or if that link breaks, via the Nifi Documentation 页找到。

或者,如果您希望将端点限制为特定动词,请考虑 HandleHttpRequest and HandleHttpResponse

的组合

ListenHTTP 处理器...

... starts an HTTP Server and listens on a given base path to transform incoming requests into FlowFiles. The default URI of the Service will be http://{hostname}:{port}/contentListener. Only HEAD and POST requests are supported. GET, PUT, and DELETE will result in an error and the HTTP response status code 405.

-- Nifi Documentation, ListenHTTP 1.6.0

我已经能够通过 Invoke-WebRequest 使用 PowerShell POST 到 Nifi,但需要指定 -ContentType:"application/x-www-form-urlencoded"。此内容类型在 @apiri 的回答中的 curl 命令中隐式设置。

下面的示例有效,作为额外的奖励,您可以包含一个 header,它将在生成的流文件上设置一个属性。请记住,您需要在处理器配置中设置可选 HTTP Headers 以作为属性(正则表达式) 属性 接收。

[PS] $HttpPost = @{
    Uri = "http://{hostname}:{port}/contentListener"
    Method = "POST"
    ContentType = "application/x-www-form-urlencoded"
    Headers = @{MyAttribute = "SomeValue"}
}

[PS] $Body = Get-Content <some_file> -Raw

[PS] Invoke-WebRequest @HttpPOST -Body:$Body

VERBOSE: POST http://{hostname}:{port}/contentListener with -1-byte payload
VERBOSE: received 0-byte response of content type text/plain

StatusCode        : 200
StatusDescription : OK