HTTPRequest 节点
使用 HTTPRequest 节点与 Web Service 进行交互。
本主题包含以下几部分:
有关如何配置 HTTPRequest 节点的信息,请参阅 配置 HTTPRequest 节点。
用途
HTTPRequest 节点与 Web Service 交互,使用全部或部分输入消息作为发送到该服务的请求。 您也可以配置此节点,以便在将消息传播到消息流中的后续节点之前,根据输入消息的内容创建输出消息,加上 Web Service 响应的内容。
根据配置,此节点通过输入消息的指定内容来构造 HTTP 或基于 SSL 的 HTTP (HTTPS) 请求,并将此请求发送到 Web 服务。 节点从 Web Service 接收响应,并解析此响应以将之包含在输出树中。 如果您的配置要求生成 HTTP 头,那么节点会生成这些头。
可以在包含或不包含 HTTPInput 或 HTTPReply 节点的消息流中使用此节点。
HTTPRequest 节点处理以下消息域中的消息:
- DFDL
- XMLNSC
- JSON
- BLOB
- MIME
- XMLNS
- MRM
HTTPRequest 节点位于 HTTP 面板的抽屉中, 在 IBM App Connect Enterprise 工具包中用以下图标表示:

使用 HTTPRequest 节点向 Web Service 发出请求
- 服务 URL。
- 远程服务器处理的数据流,发回的响应通常是 SOAP 或 XML 中的其他 Web Service 消息。
URL 格式为 http://<address>[:<port>]/<function>;例如,http://localhost:7080/request。 该 URL 可以在HTTPRequest节点参数中静态指定为消息本身的一个字段,也可以指定为本地环境的一个字段。 要发送到 Web Service 的数据可以是消息树的整体或部分,如 HTTPRequest 节点属性中所指定。
对于大多数请求,数据必须是CCSID 1208 格式。 应答可以替换输入消息,也可以插入到消息树中; 位置在 HTTPRequest 节点参数中指定。 应答域为 XMLNS。 如果请求成功,则 HTTPResponse 插入到消息树的前端,应答位于树的指定位置,并且请求传至输出终端。 如果 HTTPRequest 节点无法发出请求,那么会将 ExceptionList 插入到消息树中,并将树传播到 Failure 终端。
Set OutputRoot.XMLNS.error850 = CAST(InputRoot.XMLNS.error.BLOB as CHAR CCSID 850);有关 HTTP 的信息,请参阅超文本传输协议 - HTTP/1.1。 如需了解有关 HTTP 返回代码的更多信息,请参阅 HTTP 响应代码。您可以指定超时时间间隔,从而当请求时间超过指定时间时,将请求以正确的消息传至 Failure 终端。 对于 HTTPRequest 节点处理的每个请求,它将打开一个连接,然后在返回响应时将其关闭。 如果指定了超时时间间隔,在时间间隔后会关闭套接字。 这个关闭确保请求仅获得正确响应,并且丢弃任何请求超时的响应数据。
您可以使用 HTTP 代理通过中间站点传送请求。 您可以将工具作为代理运行来查看请求和响应,从而对流进行调试 。 HTTP 目标如代理所示;如果指定了本地主机的 HTTP 目标,并且 HTTP 代理正运行在另一台计算机上,则请求路由到远程代理计算机上,而不是发送请求的源计算机上。
在消息流中使用 HTTPRequest 节点
HTTPRequest节点可用于任何必须发送 HTTP 请求的消息流。 最常用的示例是调用 Web Service 的消息流。
有关 Web Service 的更多信息,请参阅 处理 Web Service 消息。
- 基本认证,请参阅在 HTTP 请求中提供凭证。
处理错误
节点使用 TCP/IP 直接与外部服务交互;因此会遇到以下几种类型的错误:
- TCP/IP 生成的错误,例如no route
to host或者connection refused.
如果此节点检测到这些错误,则用收到的错误信息填充异常列表,并将未经更改的输入消息传递到 Failure 终端。
- Web 服务器返回的错误。 表示这些错误的 HTTP 状态码不在 100 - 299 范围之内。 如果节点检测到这些错误,将会按照错误选项卡上指定的属性将应答路由到 Error 终端。
应答将作为 BLOB 消息输出,这是因为节点无法确定此应答的格式是什么。 如果您未配置此节点处理重定向,则也会以相同的方法来处理具有重定向状态码(3xx)的消息。
HTTP 响应代码
HTTPRequest 节点将 100 系列状态码视为 "continue" 响应,废弃当前响应,并等待来自 Web 服务器的另一个响应。
200 系列状态码被视为成功,节点的不同选项卡上的设置确定生成的输出消息的格式,并且响应将被路由到节点的 Out 终端。
300 系列状态码用于重定向。 如果选择了遵循 HTTP(s) 重定向属性,那么此节点会将请求重新发送到所接收的响应中指定的新目标。 如果未选择 “跟随 HTTP 重定向” 属性,则代码将被视为错误,如使用HTTPRequest节点向Web服务发出请求中所述。 如需了解有关 HTTP 返回代码的更多信息,请参阅 HTTP 响应代码。
400 和 500 系列状态码是错误,将按 使用 HTTPRequest 节点向 Web Service 发出请求中所述进行处理。 如需了解有关 HTTP 返回代码的更多信息,请参阅 HTTP 响应代码。
处理头
如果选择 将输入消息替换为 Web Service 响应 或 将输入替换为错误,那么输入消息的头 (当消息到达 HTTPRequest 节点的 In 终端时属于该消息的头) 不会与离开 HTTPRequest 节点的消息一起传播。 然而,如果指定了某个在消息树中指定位置的属性,则传播输入消息的头。
HTTPResponse 头包含由远程 Web Service 返回的头,它是从节点传播的消息(属性后面)中的第一个头。 无论选择哪些选项,都会执行此操作。 因此,要将来自 HTTPRequest 节点的应答放入 IBM MQ 队列,请处理这些头,以便 MQMD 是第一个头 (在 "属性" 之后)。
如果要将输入消息替换为响应,那么可以在 HTTPRequest 节点之前将输入消息 MQMD 复制到环境树中,然后在 HTTPRequest 节点之后将其复制回消息树中。 如果要为响应指定位置以保留现有的输入消息头,则必须移动或移除 HTTP 响应头从而使 MQMD 成为第一个头。
SET OutputRoot = InputRoot;
SET OutputRoot.HTTPResponseHeader = NULL; SET OutputRoot = InputRoot;
DECLARE HTTPHeaderRef REFERENCE TO OutputRoot.HTTPResponseHeader;
DETACH HTTPHeaderRef;
ATTACH HTTPHeaderRef TO OutputRoot.MQMD AS NEXTSIBLING;终端和属性
下表描述了 HTTPRequest 节点终端。
| 终端 | 描述 |
|---|---|
| 输入 | 接受节点处理的消息的输入终端。 |
| 失败 | 如果在节点中处理消息期间检测到故障,消息将路由到此输出终端。 |
| 输出 | 如果成功完成 Web Service 请求并且需要在此消息流内进行进一步处理,消息将路由到此输出终端。 |
| Error | 如果未设置属性遵循 HTTP(s) 重定向属性,那么会将包含不在范围 200 到 299 之内的 HTTP 状态码的消息路由到此输出终端,包括重定向代码 (3xx)。 |
下表描述了此节点的属性。 标题为 M 的列指示该属性是否为 必需 (如果未定义缺省值时必须输入值,那么在面板上标有星号); 标题为 C 的列指示该属性是否为 可配置 (您可以在将消息流添加到 BAR 文件以进行部署时更改该值)。
下表描述了 HTTPRequest 节点的 "描述" 属性。
| 属性 | M | C | 缺省 | 描述 |
|---|---|---|---|---|
| 节点名 | 否 | 否 | 节点类型 HTTPRequest | 节点的名称。 |
| 简短描述 | 否 | 否 | 节点的简要描述。 | |
| 详细描述 | 否 | 否 | 描述消息流中节点用途的文本。 |
下表描述了 HTTPRequest 节点的 "基本" 属性。
| 属性 | M | C | 缺省 | 描述 | mqsiapplybaroverride 命令属性 |
|---|---|---|---|---|---|
| Web Service URL | 是 | 是 | Web Service 的 URL。 必须以 http://hostname[:port]/[path] 的格式提供该 URL,其中
|
URLSpecifier | |
| 请求超时(秒) | 是 | 是 | 120 | 节点等待来自 Web Service 的响应的时间(以秒计)。 有效范围是 1 到 (231)-1。 不能输入表示无限期等待的值。 超时可能要耗用比指定值长一秒的时间。 | timeoutForServer |
HTTPRequest节点 HTTP 的设置属性如下表所示。
| 属性 | M | C | 缺省 | 描述 | mqsiapplybaroverride 命令属性 |
|---|---|---|---|---|---|
| HTTP(S) 代理位置 | 否 | 是 | 请求所发送到的代理服务器。 此值的格式必须为 hostname:port。 如果配置的代理服务器需要认证,那么必须使用具有凭证类型 |
httpProxyLocation | |
| 遵循 HTTP(S) 重定向 | 否 | 否 | 未选中 | 如果选中此复选框,将遵循重定向。 如果取消选中此复选框,则不遵循重定向。 | |
| HTTP 版本 | 否 | 是 | 1.0 | 用于请求的 HTTP 版本。 有效值为 1.0 和 1.1。 | httpVersion |
| 启用 HTTP/1.1 保持活动 | 否 | 是 | 选中(如果 HTTP 版本为 1.1) | 使用 HTTP/1.1 保持活动 | enableKeepAlive |
| HTTP 方法 | 否 | 否 | POST | HTTP 方法。 有效值为 POST、GET、PUT、DELETE 和 HEAD。 默认情况下 ,HTTPRequest节点在连接到远程Web服务器时使用 HTTP POST方法。 HEAD 用于确定服务是否可用 - 例如,网络分派器尝试确定哪个服务器可用 - 并发送回正确的头(包括 content-length)而无主体数据。 | |
| 使用压缩 | 否 | 是 | 无 | 此属性控制是否压缩 HTTP 请求内容。 您可以从 none、gzip、zlib (deflate) 和 deflate 中选择值。 如果压缩请求,那么 Content-Encoding 头会设置为指示压缩内容。 zlib (deflate) 表示 RFC 1950 + RFC 1951 组合。 deflate 表示仅 RFC 1951。 |
requestCompressionType |
下表描述了 HTTPRequest 节点 SSL 属性。
| 属性 | M | C | 缺省 | 描述 | mqsiapplybaroverride 命令属性 |
|---|---|---|---|---|---|
| 协议 | 否 | 是 | TLS | 发出 HTTPS 请求时使用的 SSL 协议。 | protocol |
| 允许的 SSL 密码 | 否 | 是 | 发出 SSL 请求时使用的以逗号分隔的密码列表。 缺省值空字符串表示使用所有可用的密码。 | allowedCiphers | |
| 启用 SSL 证书主机名检查 | 否 | 是 | 否 | 此属性指定接收请求的服务器的主机名是否必须与 SSL 证书中的主机名匹配。 | hostnameChecking |
| SSL 客户机认证密钥别名 | 否 | 是 | (空字符串) | 此属性指定 HTTP 连接客户机端的 SSL 认证别名。 使用缺省值表示将自动为您选择第一个适当的密钥。 | keyAlias |
| 启用证书撤销列表检查 | 否 | 是 | 未选择 | 此属性指定是否应该对 SSL 连接启用 CRL 检查。 | enableCRLCheck |
下表描述了 HTTPRequest 节点的 "响应消息解析" 属性。
| 属性 | M | C | 缺省 | 描述 |
|---|---|---|---|---|
| 消息域 | 否 | 否 | BLOB | 这是用于解析消息的域。 如果此字段为空,缺省值为 BLOB。 |
| 消息模型 | 否 | 否 | 未选中 | 这是在其中定义消息的消息模型模式文件的名称或位置。 单击浏览时,将会显示所选消息域的可用消息模型模式文件列表。 |
| 消息 | 否 | 否 | 未选中 | 消息模型模式文件中消息根的名称或位置。 此列表将以您选择的消息模型中定义的所有可用消息进行填充。 |
| 物理格式 | 否 | 否 | 未选中 | 消息物理格式的名称。 如果您使用的是 MRM 或 IDOC 解析器,请从列表中选择入局消息的物理格式。 此列表包含您已经为选定消息模型定义的所有物理格式。 如果将消息域属性设置为 DataObject,那么可以将此属性设置为 XML 或 SAP ALE IDoc。 如果必须解析来自外部源的位流并生成消息树,请将此属性设置为 SAP ALE IDoc。 |
下表描述了 HTTPRequest 节点的 "解析器选项" 属性。
| 属性 | M | C | 缺省 | 描述 |
|---|---|---|---|---|
| 解析计时 | 否 | 否 | 按需解析 | 此属性控制何时解析响应消息。 有效值为按需、立即和完成。 有关此属性的完整描述,请参阅 按需解析。 |
| 使用 XML 模式数据类型构建树 | 否 | 否 | 未选中 | 此属性控制 XMLNSC 解析器是否使用取自 XML 模式的数据类型在消息树中创建语法元素。 仅当您将验证选项卡上的验证属性设置为内容或内容和值时,才能选择此属性。 |
| 将 XMLNSC 压缩解析器用于 XMLNS 域 | 否 | 否 | 未选中 | 此属性控制是否将 XMLNSC 压缩解析器用于 XMLNS 域中的消息。 如果设置此属性,当输入 MQRFH2 头或“响应消息解析”属性域是 XMLNS 时,连接到输出终端的节点中的 XMLNSC 下会显示响应消息数据。 |
| 保留混合内容 | 否 | 否 | 未选中 | 此属性控制当遇到响应消息中的混合文本时,XMLNSC 解析器是否在消息树中创建元素。 如果选中此复选框,将为混合文本创建元素。 如果取消选中此复选框,将忽略混合文本并且不创建任何元素。 |
| 保留注释 | 否 | 否 | 未选中 | 此属性控制当遇到响应消息中的注释时,XMLNSC 解析器是否在消息树中创建元素。 如果选中此复选框,将为注释创建元素。 如果取消选中此复选框,将忽略注释并且不创建任何元素。 |
| 保留处理指令 | 否 | 否 | 未选中 | 此属性控制当遇到响应消息中的处理指令时,XMLNSC 解析器是否在消息树中创建元素。 如果选中此复选框,将为处理指令创建元素。 如果取消选中此复选框,将忽略处理指令并且不创建任何元素。 |
| 不透明元素 | 否 | 否 | 空 | 此属性用于在 XMLNSC 解析器要进行不透明解析的响应消息中指定一列元素。 仅当未启用验证(即,如果验证属性设置为无)时,才会执行不透明解析;如果启用了验证,那么将忽略不透明元素中指定的条目。 |
下表描述了 HTTPRequest 节点的 "错误处理" 属性。
| 属性 | M | C | 缺省 | 描述 |
|---|---|---|---|---|
| 用错误代替输入 | 否 | 否 | 选中 | 如果选中此复选框,将用错误消息内容替换输入消息内容。 如果不选中此复选框,那么必须指定错误消息位置。 |
| 错误消息位置 | 是 | 否 | OutputRoot | 所解析的元素在 Web Service 错误位流中的开始存储位置。 此属性采用 ESQL 字段引用的格式。 |
下表描述了 HTTPRequest 节点的 "高级" 属性。
| 属性 | M | C | 缺省 | 描述 | mqsiapplybaroverride 命令属性 |
|---|---|---|---|---|---|
| 将整个输入消息用作请求消息 | 否 | 否 | 选中 | 如果选中此复选框,那么会将完整的输入消息体传递给 Web Service。 如果您取消选中此复选框,那么必须选择树中的请求消息位置。 | |
| 树中的请求消息位置 | 是 | 否 | InputRoot | 要发送给 Web Service 的位流的开始创建位置。 此属性采用 ESQL 字段引用的格式。 | |
| 用 Web Service 响应替换输入消息 | 否 | 否 | 选中 | 如果选中此复选框,那么 Web Service 响应消息将替换输入消息副本,以作为所创建的输出消息的内容。 如果您取消选中此复选框,那么必须选择树中的响应消息位置。 | |
| 树中的响应消息位置 | 是 | 否 | OutputRoot | 所解析的元素在 Web Service 响应位流中的开始存储位置。 此属性采用 ESQL 字段引用的格式。 | |
| 从输入消息生成缺省 HTTP 头 | 否 | 否 | 选中 | 如果选中此复选框,将生成 HTTPRequestHeader。 如果 不选中此复选框,输入消息中必须存在有效的 HTTPRequestHeader。 | |
| 缺省情况下接受压缩响应 | 否 | 是 | 未选中 | 此属性指示缺省情况下请求节点是否处理压缩响应。 如果请求头不包含 Accept-Encoding 头并且选中此选项,那么节点将 Accept-Encoding 头设置为“gzip, deflate”,并且节点解压缩收到的任何压缩响应。 如果传播到请求节点的消息包含 Accept-Encoding 头,那么消息流或客户机应用程序应处理任何压缩响应。 因此,在此情况下选择此选项无任何影响。 |
acceptCompressedResponses |
下表描述了 HTTPRequest 节点的 "验证" 属性。
有关这些属性的完整描述,请参阅 验证属性。
| 属性 | M | C | 缺省 | 描述 | mqsiapplybaroverride 命令属性 |
|---|---|---|---|---|---|
| 验证 | 否 | 是 | 无 | 此属性控制是否进行验证。 有效值为无、内容和值、内容和继承。 | validateMaster |
| 失败操作 | 否 | 否 | 异常 | 此属性控制验证失败时采取的措施。 只有将验证设置为内容或内容和值,才可以设置此属性。 有效值为用户跟踪、本地错误日志、例外项和例外项列表。 |
下表描述了 HTTPRequest 节点的 "安全性" 属性。
| 属性 | M | C | 缺省 | 描述 |
|---|---|---|---|---|
| 事件 | 否 | 否 | 无 | 为节点定义的事件显示在此选项卡上。 缺省情况下,不会在消息流中的任何节点上定义任何监视事件。 使用 添加, 编辑和 删除 来创建,更改或删除节点的监视事件。 通过选中或取消选中启用复选框,可以启用或禁用此处显示的事件。 |
本地环境覆盖项
| 设置 | 描述 |
|---|---|
| RequestURL | 覆盖节点上的 Web
Service URL 属性。 例如: |
| RequestURLDoNotPercentEncodeCharacters | 指定将 RequestURL 中的字符排除在百分号编码之外。 HTTPRequest 节点的缺省行为是对 RequestURL中的所有非保留字符进行百分比编码。 缺省情况下,保留字符不进行百分号编码。 以下字符是保留字符: : / ? # [ ] @!$ & ' ( ) * + , ; = < > % |
| Timeout | 覆盖节点上的请求超时(秒)属性。 例如: |
| TimeoutMillis | 覆盖节点上的请求超时(秒)属性。 例如:此属性以毫秒为单位来定义超时。 如果同时设置了 TimeoutMillis 和 Timeout 的值,那么前者覆盖后者。 |
| ProxyURL | 覆盖节点上的 HTTP(S) 代理位置属性。 例如: |
| RequestLine.RequestURI | 覆盖 RequestURI,这是 URL 和端口后面的路径。 例如: |
| RequestLine.HTTPVersion | 覆盖节点上的 HTTP
版本属性。 例如: |
| KeepAlive | 覆盖节点上的启用 HTTP/1.1 keep-alive 属性。 例如: |
| RequestLine.Method | 覆盖节点上的 HTTP
方法属性。 例如: |
| SSLProtocol | 覆盖 SSLProtocol。 例如:有效值是:SSL、SSLv3、TLS、TLSv1、TLSv1.1、TLSv1.2、SSL_TLS 和 SSL_TLSv2
注: 缺省情况下, SSLv3 在 IBM App Connect Enterprise V 11.0中处于禁用状态,因为 SSLv3 不再被视为安全。
|
| SSLCiphers | 覆盖节点上的允许 SSL 密码属性。 例如: |
| ProxyConnectHeaders | 指定附加的头,如果出站请求是通过代理建立的
SSL 连接,那么将使用这些头。 这些附加的头随初始 CONNECT
请求一起发送到代理。 例如,使用 SSL 时,可以向代理服务器发送代理认证信息。 可以发送多个头,但为了符合 RFC2616 标准,各个头之间必须以一个回车符和一个换行符 (ASCII 0x0D 0x0A) 分隔;例如:仅当请求是通过代理服务器执行的 SSL 请求时,才使用此设置。 要针对非 SSL 请求发送代理认证信息,请在 HTTPRequestHeader 文件夹中指定各个头,如以下示例中所示: |
| UseFolderMode | 设置 UseFolderMode。 用于位流生成;对于某些解析器,这将更改输出位流。 例如: |
| QueryString | 允许出站查询字符串参数的设置。 必须逐个设置每个参数。 例如:上述 ESQL 将导致编码以下查询字符串(根据 http://tools.ietf.org/html/rfc3986)并随出站请求一起发送:如果目标 URL 已有一个或多个查询参数,那么此处指定的其他参数将附加到现有列表。 |
| QueryStringCCSID | 指定在编码之前,必须将查询字符串参数转换为非缺省的字符集(缺省字符集为 UTF-8)。 根据 RFC3986,首先将任何查询字符串参数转换为指定的 CCSID ,然后再对生成的字符串进行编码。 例如:上述 ESQL 导致在进行编码前将任何 QueryString 参数转换为 943 代码页。 注:任何查询字符串参数都必须包含 Unicode 的数据。 |
| QueryStringPercentEncodeSpace | 指定 QueryString 中的任何空格字符以百分比编码,然后随出站请求一起发送。 缺省情况下,QueryString 中的任何空格字符将转换为“+”字符。 例如: |
| QueryStringSendWithRedirect | 指定 QueryString 随 HTTP(S) 重定向一起发送。 例如: |
| QueryStringDoNotPercentEncodeCharacters | 在 QueryString 中指定在构建 URI 时不对其进行百分比编码的任何字符。 例如: |
| QueryStringSemicolonSeparator | 指定在查询字符串之间使用分号作为分隔符,而不是使用“&”。 例如: |
| Compression | 覆盖节点的使用压缩属性。 例如:要设置进行压缩前必须达到的最小大小(以字节计),请使用以下覆盖值: |
| SSL 认证别名 | 覆盖节点上 HTTP 连接客户机端的 SSL 认证别名属性。 例如: |
| EnableCRLCheck | 覆盖节点上的启用证书撤销列表检查属性。 例如: |
| ServicePrincipalName | 指定集成节点协商 Kerberos 安全协议时使用的服务主体名称 (SPN)。 例如: |
| FollowRedirection | 覆盖节点上的遵循 HTTP(S) 重定向属性。 例如: |
使用 WrittenDestination 数据
WrittenDestination = (
HTTP = (
RequestURL = 'http://127.0.0.1:7800/HTTPFLOW' (CHARACTER)
Compression = (
OriginalSize = 53 (INTEGER)
CompressedSize = 71 (INTEGER)
)
)
)