WEB SEND(客户机)
使用 CICS Web 支持,通过 CICS® 作为 HTTP 客户端发送 HTTP 请求。
语法
条件: CHANNELERR , CONTAINERERR , INVREQ , IOERR , ENGERR , NOTAUTH , NOTFND , NOTOPEN , TIMEDOUT 和 TOKENERR
此命令是线程安全的。
NOHANDLE、RESP 和 RESP2是常用选项,可添加到所有 EXEC CICS 命令中以处理错误条件。 命令语法图和选项说明中没有明确包含这些选项。 有关这些常用选项和 EXEC CICS 命令语法的信息,请参阅 EXEC CICS 命令格式和编程注意事项.
描述
WEB SEND 对于 CICS , HTTP用于向服务器发出 HTTP。 必须在此命令中包含会话令牌。 有关CICS HTTP正确使用 WEB SEND 命令的指南,请参阅通过 CICS HTTP发出 HTTP。
对于作为 HTTP CICS ,在与服务器的连接关闭后,无法使用 WEB SEND 命令。 如果应用程序或服务器在消息上发送 Connection: close 头,那么您可能会迂到此情况。 如果需要测试服务器是否已请求终止连接,请使用 WEB READ HTTPHEADER 命令在服务器的最后一条消息中查找 Connection: close 头。
对于HTTP CICS ,您可以使用 WEB CONVERSE 命令来替代 WEB SEND 命令后跟 WEB RECEIVE 命令。 但是, WEB CONVERSE 命令不支持分块的传输编码,因为此机制需要一系列发送操作,而 WEB CONVERSE 命令提供单个发送操作。
将消息发送到服务器时,请求可能会超时。 在这种情况下,将应用 TRANSACTION 定义的 DTIMOUT 属性中指定的死锁超时时间间隔,并且 CICS 会向应用程序返回 TIMEDOUT 响应。
HTTP 标头通常保存在64位(高于标准)存储中,并在那里进行处理和发送。 当HTTP的正文从一个容器发送时,容器数据将被处理并从64位存储器发送。 当 HTTP从应用程序缓冲区发送时, CICS 需要转换数据,则数据将在64位缓冲区中转换并发送。 但是,发送文档时,将在 31 位 (高于行) 存储器中处理该文档。
选项
- 操作(cvda)
- 指定将如何发送消息。 此CVDA值适用于作为 HTTP CICS :
- Expect
- 使 CICS 发送具有请求行和请求头的 Expect 头,并在将消息体发送到服务器之前等待 100-Continue 响应。 如果接收到除 "100-继续" 以外的响应,那么 CICS 将通知应用程序并取消发送。 如果在等待一段时间后未接收到响应,那么 CICS 将发送消息体。
HTTP/1.1下的服务器不支持 "期望" 头。 如果 CICS 尚不知道服务器的 HTTP , CICS 会在发送您的请求之前发出附加请求,以确定服务器的 HTTP。 如果 Expect 头不适用,那么 CICS 会发送不带该头的请求。
CICS 为获取 HTTP而发出的额外 HTTP会影响性能。 要避免此性能影响,请使用 URIMAP 资源来管理连接。
仅当请求具有消息体时,才必须使用此选项。
- 验证 (cvda)
- 指定用户认证详细信息,以控制对受限数据的访问。 HTTP , CICS 所适用的CVDA值如下:
- NONE
- 指定访问此数据没有任何限制,因此不需要凭证。 这是 AUTHENTICATE 的缺省值。
- basicAuth
- 指定此会话需要 HTTP 基本认证凭证。 可以在命令中提供这些详细信息,也可以使用 XWBAUTH 全局用户出口提供这些详细信息。
- CHANNEL(数据值)
- 指定容器所属的通道的名称。 通道的名称最多可包含 16 个字母数字字符,包括相应的标点符号。 不允许前导空白和嵌入空白。 如果名称少于 16 个字符,那么将使用尾部空格来填充该名称。 可以指定通道名称 DFHTRANSACTION 以使用事务通道。
如果指定了 CONTAINER 选项,那么 CHANNEL 是可选的。
如果未指定 CHANNEL 选项,那么 CICS 将采用当前通道。
- CHARACTERSET(数据值)
- 指定 CICS 在发送之前将请求的实体主体转换为的字符集。 字符集的名称最多可包含 40 个字母数字字符,包括相应的标点符号。 CICS 不支持 IANA 指定的所有字符集。 HTML 编码字符集 列出了 CICS 支持用于代码页转换的 IANA 字符集。
要转换要执行的实体主体,必须将 CLIENTCONV 选项指定为 (或允许缺省为) CLICONVERT。 指定 NOCLICONVERT 将禁止实体主体的转换。 如果请求转换,如果未指定 CHARACTERSET 属性,那么将使用 ISO-8859-1 作为缺省值。
- 凿岩 (cvda)
- 用于在以块 (称为分块传输编码) 发送消息时控制消息发送。 未指定此选项时,缺省情况是未使用分块的传输编码。
分块消息的内容可以分为分块以适合应用程序。 无法直接从 CICS 文档构成分块消息的主体,因此无法使用 DOCTOKEN 选项。
将带有 CHUNKYES 的单独 WEB SEND 命令用于消息的每个块。 使用 FROM 选项来指定数据块,使用 FROMLENGTH 选项来指定数据块的长度。 可以在序列的第一个 WEB SEND 命令 (发送第一个块) 上指定消息的其他选项,例如 CLOSESTATUS 选项,但不要在后续命令 (发送第二个块和后续块) 上指定这些选项。
当您发送最后一个数据块时,请使用 CHUNKEND 指定另一个 WEB SEND 命令,但不指定 FROM 和 FROMLENGTH 选项。 然后, CICS 将空块发送给收件人以结束分块的消息。
如果应用程序在块进程中的任何时间点被告知错误,请使用 WEB CLOSE 命令来停止该进程并关闭连接。 分块消息的收件人将不会接收到最终的空块,因此将忽略并废弃迄今为止已发送的数据。
发送带有分块传输编码HTTP或响应时 ,应完整描述分块传输编码的过程,只有遵循该过程,分块消息才能被接收方接受。
CVDA 值如下:
- CHUNKNO
- 分块传输编码不用于消息。 如果未指定 CHUNKING 选项,那么 CHUNKNO 是缺省值。
- 蘑菇
- 分块传输编码正在进行中。 FROM 选项指定的数据表示消息的块。
- 春肯德
- 分块传输编码已完成。 没有为此发送指定任何数据。 CICS 向收件人发送空块以完成分块消息。
注:- 方法 (METHOD 选项) 必须与分块的传输编码兼容。
- 当您开始发送分块消息的部分时,应用程序无法发送任何不同的消息或接收任何项,直到发送最终的空块并且分块消息完成为止。
如果使用的是 CONTAINER 选项,请勿指定 CHUNKING 选项。 无法从容器发送分块响应。
HTTP/1.1下的服务器不支持分块传输编码。 如果 CICS 尚不知道服务器的 HTTP , CICS 会在发送您的请求之前发出附加请求,以确定服务器的 HTTP。 如果服务器低于 HTTP/1.1 , WEB SEND CHUNK 将返回INVREQ RESP2=69。 CICS 为获取 HTTP而发出的额外 HTTP会影响性能。 要避免此性能影响,请使用 URIMAP 资源来管理连接。
- 关闭状态 (cvda)
- 指定是否在消息中包含带有 "close" 连接选项 (Connection: close) 的 Connection 头。 缺省值是不包含头。 CVDA 值如下所示:
- 关闭
- 使 CICS 写此请求的 Connection: close 头。 头通知服务器,在服务器发送其对请求的响应后,将关闭连接。 (对于处于 HTTP/1.0 级别的服务器, CICS 通过省略 Connection: keep-Alive 头来实现相同的效果。) 如果已在 URIMAP 资源中为此连接实现连接池,请勿指定此选项,因为无法合用已关闭的连接以供复用。 仅当这是对服务器的最终请求并且您未使用连接池时,才应指定此选项。
在 WEB SEND 命令上指定 CLOSE 选项时,在建立新连接之前,无法将更多消息发送到服务器。 当您可以在消息的第一个区块上指定 CLOSE 选项以通知服务器在分块消息完成并发送响应后将关闭连接时,使用分块传输编码的情况例外。
- 未关闭
- 表示 Connection: close 头不用于此请求。 如果服务器标识为 HTTP/1.0,那么 CICS 使用 "保持活动连接" 选项 (Connection: Keep-Alive) 发送 Connection 头,以通知需要持久连接。
- CLIENTCONV (cvda)
- 指定 CICS 是否在发送之前将 HTTP实体主体从应用程序使用的代码页转换为适合接收者的字符集。 如果省略此选项,那么缺省情况是除非指定了非文本介质类型,否则将转换任何实体主体。 CVDA 值如下:
- 陈词滥调
- CICS HTTP实体主体从应用程序使用的代码页转换为服务器识别的字符集。 可以在此命令上使用 CHARACTERSET 选项来指定所使用的字符集。 如果请求转换,但未指定字符集,则默认情况下, CICS 会将实体主体转换为 ISO-8859-1。 (应用程序使用的代码页是在 WEB OPEN 命令上为连接标识的。)对于非文本介质类型, CICS 仅在以下情况下转换消息体:
- 使用 FROM 选项从缓冲区发送消息体,并指定 CLICONVERT 和/或 CHARACTERSET 选项。
- 使用 DOCTOKEN 选项从文档发送消息体。
- 从容器发送消息体,并指定 CHARACTERSET 选项。
BIT 容器包含非文本介质,因此不支持代码页转换。 因此,如果使用 BIT 容器对 CLICONVERT 或 CHARACTERSET 选项进行编码,那么会产生 INVREQ RESP2 错误。
- NOCLICONVERT
- CICS 不会转换 HTTP实体主体,而是以应用程序使用的代码页发送到服务器,这在连接的 WEB OPEN 命令中已确定。
- CONTAINER(数据值)
- 指定 HTTP在发送到服务器之前所在的容器的名称。 容器的名称最多可以包含 16 个字母数字字符,包括相应的标点符号。 不允许前导空白和嵌入空白。 如果名称短于 16 个字符,那么将使用尾部空格来填充该名称。
当指定了CONTAINER时, CICS 将 HTTP存储在64位存储器中,并从该存储器中发送。
- DOCSTATUS (cvda)
- 指示在处理 WEB
SEND 命令期间将删除还是不删除文档。 CVDA 值如下所示:
- DOCDELETE
- 保存文档内容以进行发送后, CICS 会删除该文档。 将立即释放为文档分配的存储空间。 如果对文档发出后续请求,那么这些请求将生成 TOKENERR 响应。
- NODOCDELETE
- 在处理 WEB SEND 命令期间, CICS 不会删除文档。 此值是 DOCSTATUS 的缺省值。
- DOCTOKEN(数据值)
- 指定要作为消息体发送的文档的 16 字节二进制令牌。 使用 CICS 文档接口 (EXEC CICS DOCUMENT
CREATE, INSERT和 SET 命令) 创建文档。 您不必在发送文档之前对其进行检索。 FROM 选项提供了创建消息体的替代方法。
分块消息的主体不能由 CICS 文档构成,因此 DOCTOKEN 选项不能用于分块的传输编码。
指定 DOCTOKEN 时,将在 31 位存储器中处理文档。
- FROM(数据区)
- 指定保存消息体的数据缓冲区。 消息体由应用程序构建。 指定 FROM 选项时,请使用 FROMLENGTH 选项来指定数据缓冲区的长度。 DOCTOKEN 和 CONTAINER 选项提供了创建消息体的替代方法,但 DOCTOKEN 选项不能用于分块消息的主体。
数据区的大小没有设置最大限制,但其大小在实践中受到存储注意事项的限制。 HTTP生成实体体时,需要考虑更多的存储信息。
当指定 FROM 时,如果 CICS 需要在发送前复制或转换 HTTP ,则主体将在 64 位存储中复制或转换,并从 64 位存储中发送。
- FROMLENGTH(数据值)
- 指定在 FROM 选项 (消息体) 上提供的数据缓冲区的长度 (作为全字二进制值)。 您必须正确声明此值,因为不正确的数据长度可能会导致消息收件人出现问题。
- MEDIATYPE(数据值)
- 指定提供的任何消息体的数据内容,例如
text/xml。 必须为 MEDIATYPE指定 56 字节区域。 介质类型最多包含 56 个字母数字字符,包括相应的标点符号,但不包括空格。 有关介质类型的更多信息,请参阅 IANA 介质类型和字符集。 CICS 会检查介质类型的格式是否正确,但不会针对数据内容检查介质类型的有效性。 CICS 使用此信息为消息生成 Content-Type 头。对于需要主体的请求,必须指定 MEDIATYPE 选项。 没有缺省值。 但是,如果所需的 Content-Type 头必须包含空格或超过 56 个字符,那么应用程序可以使用 WEB WRITE HTTPHEADER 命令提供该头。 在这种情况下,请勿指定 MEDIATYPE 选项。
提供的介质类型用于确定在以下情况下是否需要代码页转换:- 如果要从缓冲区发送消息,请使用 FROM 选项,并且未指定 CLIENTCONV 和 CHARACTERSET 选项。
- 如果要从文档发送消息,请使用 DOCTOKEN 选项,并且未指定 CLIENTCONV 和 CHARACTERSET 选项。
- 如果要从指定的容器发送消息,请使用 CONTAINER 选项,并且指定了 CLICONVERT 或未指定 CLIENTCONV 和 CHARACTERSET 选项。
如果提供的介质类型为文本,那么将转换消息。 如果提供的介质类型为非文本,那么不会转换消息。
- 方法 (cvda)
- 指定请求HTTP。
此命令支持 GET , HEAD , PATCH , POST , PUT , TRACE , OPTIONS 和 DELETE 方法。 然而,某些 HTTP (尤其是 HTTP/1.0 服务器)可能无法实现所有这些方法。
CICS 支持的 HTTP 方法参考中提供了有关正确使用方法的更多信息,包括适用于每种方法HTTP。
CICS 会阻止针对不适合的方法发送消息体,并在适当的方法中需要该消息体。 分块的传输编码与没有请求主体的方法无关。
CVDA 值如下:- GET
- 从服务器获取资源。 不允许请求主体。
- HEAD
- 获取资源HTTP ,但不获取响应正文。 不允许请求主体。
- PATCH
- 请求将一组更改应用于请求 URI 所标识的资源。 需要请求主体。
- POST
- 将数据发送到服务器。 需要请求主体。
- PUT
- 创建或修改服务器上的资源。 需要请求主体。
- TRACE
- 跟踪请求到服务器的路径。 不允许请求主体。
- 选项
- 获取有关服务器的信息。 允许请求主体,但该主体没有定义的用途。 如果使用请求主体,那么必须指定介质类型。
- DELETE
- 删除服务器上的资源。 不允许请求主体。
- PASSWORD(数据值)
- 指定与允许访问此数据的用户标识或登录名相关联的密码。 仅当使用 USERNAME 选项时, PASSWORD 选项才是必需的。
如果在 WEB SEND 命令中指定 USERNAME 和 PASSWORD ,并且还在 URIMAP 资源中指定 AUTHENTICATE ,那么将使用 WEB SEND 值。
如果指定的密码长度超过 8 个字符,那么在发送到 z/OS® 系统时,会将其视为密码短语。 PASSWORD 选项必须用 EBCDIC 代码页 037 编码。
- PASSWORDLEN(数据值)
- 将为 PASSWORD 选项提供的缓冲区长度指定为全字二进制变量。
- PATH(数据区)
- 指定服务器中应用程序需要访问的特定资源的路径信息。
如果使用 URIMAP 选项在 WEB OPEN 命令上指定此连接的现有 URIMAP 定义,那么该 URIMAP 定义中指定的路径是 WEB SEND 命令的缺省路径。 在这些情况下,如果未在 WEB SEND 命令上指定路径信息,那么将使用 URIMAP 定义中的路径。 如果指定与 URIMAP 定义中给定的路径不同的路径,那么该路径将覆盖 URIMAP 定义中的路径。
如果在 WEB OPEN 命令中未使用 URIMAP 选项,那么没有缺省路径,您必须提供路径信息。 您可以使用 WEB PARSE URL 命令从已知的 URL提取路径信息。
作为使用 PATH 选项提供路径信息的替代方法,您可以在 WEB SEND 命令上使用 URIMAP 选项来指定直接获取路径信息的 URIMAP 定义。
- PATHLENGTH(数据值)
- 指定路径的长度,作为全字二进制值。 如果要使用 PATH 选项提供路径信息,那么必须指定 PATHLENGTH 选项。 如果您使用 WEB PARSE URL 命令解析 URL ,路径长度信息将被返回。
- QUERYSTRING(数据区)
- 指定要作为请求的一部分提供给服务器的查询字符串。 您不必在查询字符串的开头包含问号 (?); 如果不包含该问号,那么 CICS 会在构造请求时自动为您提供该问号。 如果在查询字符串中包含转义字符,那么 CICS 会将其以转义格式传递到服务器。
- QUERYSTRLEN(数据值)
- 指定 QUERYSTRING 选项上提供的查询字符串的长度,作为全字二进制值。
- SESSTOKEN(数据值)
- 指定会话令牌,这是一个 8 字节的二进制值,用于唯一地标识 CICS 与服务器之间的连接。 对于HTTP CICS ,该值由 WEB OPEN 命令返回。 会话令牌 说明如何使用会话令牌。
- URIMAP(数据值)
- 指定 URIMAP 定义的名称 (最多为 8 个字符,大小写混合) ,该定义提供应用程序将访问的服务器中特定资源的路径信息。 URIMAP定义必须将 CICS 作为 HTTP ,并指定USAGE(CLIENT)。 其 HOST 属性必须与此连接的 WEB OPEN 命令上指定的 URIMAP 定义的 HOST 属性相同,或者与此连接的 WEB OPEN 命令的 HOST 选项中指定的主机名相同。 在 WEB SEND 命令上指定的 URIMAP 定义仅适用于此请求。
如果指定了 URIMAP 选项,请勿指定 PATH 或 PATHLENGTH 选项。
- USERNAME(数据值)
- 指定允许访问此数据的用户标识或登录名。 USERNAME 选项必须用 EBCDIC 代码页 037 编码。 如果指定了 USERNAME ,那么还必须使用 PASSWORD 选项。
如果在 WEB SEND 命令中指定 USERNAME 和 PASSWORD ,并且还在 URIMAP 资源中指定 AUTHENTICATE ,那么将使用 WEB SEND 值。
- USERNAMELEN(数据值)
- 将为 USERNAME 选项提供的缓冲区长度指定为全字二进制变量。
条件
- 122 CHANNELERR
- RESP2 值有:
- 2
- 找不到 CHANNEL 选项指定的通道。
- 110 集装箱
- RESP2 值有:
- 2
- 找不到 CONTAINER 选项指定的容器。
- 16 INVREQ
- RESP2 值有:
- 11
- 操作码无效。
- 12
- 同时指定了 URIMAP 和 PATH。 仅允许一种插件类型。 或者,对于第二个或后续块,不允许使用 URIMAP 选项。
- 13
- 关闭状态无效。
- 15
- 代码页转换失败。
- 17 日
- Expect-100 请求已被服务器拒绝。
- 22
- 区块大小无效。
- 32
- 介质类型无效。
- 33
- 方法不支持主体。
- 34
- 方法需要一个主体。
- 43
- 指定的 DOCSTATUS 值无效。
- 45
- 指定的字符集无效。
- 46
- CLIENTCONV 选项无效。
- 49
- 路径选项的格式无效。
- 54
- HTTP无效。
- 63
- URIMAP 对象已禁用。
- 64
- URIMAP 定义中的主机与打开此会话时指定的主机不匹配。
- 69
- HTTP不支持块传输编码。
- 71
- 分块的传输编码错误。
- 74
- 连接已关闭。 由于此连接处于不活动状态,服务器可能已超时。
- 76
- 需要 MEDIATYPE 选项。
- 79
- 管道正在进行中。 无法发送期望的头。
- 80
- CHARACTERSET 不能与 NOCLICONVERT 一起指定。
- 120
- CHUNKING 选项无效。
- 121
- 需要 FROMLENGTH 选项。
- 122
- 需要 FROM 选项。
- 123
- 未指定消息体。 使用 FROM , DOCTOKEN 或 CHUNKEND。
- 124
- 未指定 CHUNKING 选项,需要 FROMLENGTH 选项。
- 125
- 指定了 CHUNKNO ,需要 FROM 选项。
- 126
- 指定了 CHUNKNO ,需要 FROMLENGTH 选项。
- 127
- 指定了 CHUNKYES ,需要 FROM 选项。
- 128
- 指定了 CHUNKYES ,需要 FROMLENGTH 选项。
- 129
- 不允许将 FROM 选项与 CHUNKEND 一起使用。
- 130
- 不允许 FROMLENGTH 选项与 CHUNKEND 一起使用。
- 131
- FROMLENGTH 选项指定为零。
- 132
- 第二个块或后续块不允许 METHOD 选项。
- 133
- 对于第二个或后续块,不允许使用 MEDIATYPE 选项。
- 135
- 对于第二个或后续块,不允许使用 PATH 选项。
- 136
- 需要 METHOD 选项。
- 142
- AUTHENTICATE 无效。 CVDA 不是 NONE 或 BASICAUTH。
- 144
- 一个或多个 Web 命令参数无效。
- 145
- 未指定通道,并且没有当前通道。
- 147
- 内部转换错误。
- 150
- 已请求转换,但要发送的数据位于 DATATYPE BIT 容器中。
- 159
- 6.3 连接不安全。 产生该错误的原因是所使用的 URIMAP 指定了 ATTLS(AWARE),或者 CICS 在运行时使用了 SECURETCPIP=YES。
- 17 IOERR
- RESP2 值有:
- 42
- 套接字错误。
- 22 LENGERR
- RESP2 值有:
- 5
- PATHLENGTH 选项值不大于零。
- 8
- QUERYSTRLEN 选项值不大于零。
- 50
- FROMLENGTH 选项值不大于零。
- 139
- USERNAMELEN 为负数或大于 256。
- 140
- PASSWORDLEN 为负数或大于 256。
- 70 NOTAUTH
- RESP2 值有:
- 100
- 由安全出口禁止的路径。
- 110
- XWBAUTH 错误。 XWBAUTH 全局用户出口已发出 UERCERR 返回码,因为 XWBAUTH 出口是必需的,但无法返回有效响应。
- 13 NOTFND
- RESP2 值有:
- 61
- 未找到指定的 URIMAP 对象。
- 19 NOTOPEN
- RESP2 值有:
- 27
- 无效的会话令牌。
- 124 TIMEDOUT
- 156
- 套接字发送时超时。
- 112 托克内尔
- RESP2 值有:
- 47
- 指定的文档令牌无效或文档已删除。
