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¶m2=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.
我已经能够通过 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
刚开始使用 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¶m2=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.
我已经能够通过 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