NiFi 1.19.1 - 调用HTTP POST 不发送所有标头

问题描述 投票:0回答:1

我有在集群之间发送的文件,因此我使用 InvokeHTTP 发送到另一个集群上的负载均衡器。我可以发送文件,但并非所有标头都被发送。我指定了要在“请求标头属性模式”中发送的标头,但唯一未到达另一端的是包含大写字母的标头。例如,“header.type”可以,但“header.Date”则不行。文件到达另一个集群时带有“header.type”,但不是“header.Date”。标头值不是我设置的,当我收到它们时它们就在文件上,所以我只是尝试转发文件。第二个集群用于测试,因此它需要能够完全按照主集群获取文件的方式处理文件,并且我们使用一些带有大写字母的标头。

关于去掉带有大写字母的标题有什么建议吗?我使用了 .* 并且明确命名了要发送的属性(例如 header.type|header.Date)。

http-headers apache-nifi
1个回答
0
投票

@姜

这里的正则表达式区分大小写。如果您无法显式定义它们,并且无法手动将它们设置为属性,请尝试我在下面找到的内容。

我不想只链接堆栈外,但@matt谈论另一个堆栈外解决方案:

您可以在此处使用多种 EL 函数: 1:

${http.headers.x-My-Header:isNull():ifElse('${http.headers.x-my-header}','${http.headers.x-My-Header}'): ......}

在上面,如果 FlowFile 上不存在主题“http.headers.x-My-Header”,它将返回“http.headers.x-my-header”属性中的值;否则它从“http.headers.x-My-Header”返回值。然后您可以继续 EL 语句来执行所需的任何其他操作。

2:

${allMatchingAttributes('(?i)http.headers.x-my-header'):join(''):....} 在上面,它在“AllMatchingAttribtes()”EL函数中使用不区分大小写的Java正则表达式来从满足该正则表达式的所有FlowFile属性返回值,然后使用“join()”函数将它们全部合并在一起。由于我们期望只有一个属性实际匹配,因此结果只是一个值。这可能是最好的选择。

3:

${http.headers.x-My-Header:replaceNull(${http.header.X-my-header:replaceNull(${http.headers.x-my-header})}):.....} 在上面,我们链接了多个“replaceNull( )”函数来迭代所有情况排列,直到找到作为 FlowFile 上的属性存在的一个。

注意:在上述任何内容中,您都可以将最后一个“:....”替换为操作所需返回的主题所需的其余 EL 语句函数。

选项 1 和 3 要求您了解可能存在的所有大小写排列。 选项 2 可能是最佳选择,因为您不需要知道所有排列,但如果由于某种原因您在同一个 FlowFile 上有相同属性的多个排列,则可能会出现问题。

参考链接:https://community.cloudera.com/t5/Support-Questions/HandleHttpRequest-and-header-case-sensitivity/m-p/310491

© www.soinside.com 2019 - 2024. All rights reserved.