Main Content

matlab.net.http.MessageBody 类

包: matlab.net.http

HTTP 消息的主体

说明

MessageBody 对象包含 HTTP 消息的主体。在请求消息中,将 Body 属性设置为您的数据或者包含这些数据的 MessageBody 对象。在响应消息中,此对象包含接收到的数据。

消息数据由两个属性表示。Payload 属性包含发送给网络或从网络接收到的原始字节。Data 属性将 Payload 作为一种 MATLAB® 类型包含在内。这两个属性通常只设置一个。

类属性

Sealed
true

有关类属性的信息,请参阅类属性

创建对象

MessageBody 对象包含 HTTP 消息的主体。在请求消息中,将 Body 属性设置为您的数据或者包含这些数据的 MessageBody 对象。在响应消息中,此对象包含接收到的数据。

消息数据由两个属性表示。Payload 属性包含发送给网络或从网络接收到的原始字节。Data 属性将 Payload 作为一种 MATLAB 类型包含在内。这两个属性通常只设置一个。

属性

全部展开

消息数据,指定为下列 MATLAB 数据类型之一。有关转换的详细信息,请参阅 HTTP Data Type Conversion

  • uint8 向量 - 不转换 Data

  • 字符数组或标量字符串 - 基于 Content-Type 标头中的媒体类型及其字符集属性转换 Data

  • 结构体数组 - 使用 webreadData 转换为 JSON 字符串;或使用 webwrite 将 JSON 字符串转换为 Data

  • 图像 - 使用 imreadData 转换为图像;使用 imwrite 将图像转换为 Data

  • XML DOM - 使用 xmlreadxmlwriteData 转换为字符串或反向转换。

  • 音频数据 - 使用 audioreadaudiowrite 转换 Data

  • 表 - 使用 readtablewritetable 转换 Data

  • 其他类型的数组或元胞数组 - 使用 jsonencodeData 转换为 JSON,或使用 jsondecode 将 JSON 转换为 Data

在请求消息中,Data 属性是转换为 uint8 有效负载之前的 MATLAB 数据。当您调用 RequestMessage sendcomplete 方法时,将发生数据转换。转换取决于您在消息中指定的 Content-Type 以及 Data 的类型。如果您不指定 Content-Type,sendcomplete 方法将尝试根据数据推断出其类型,并向请求消息中添加相应的 ContentTypeField。

在响应消息中,Data 代表基于服务器指定的 Content-Type 转换为 MATLAB 类型的 uint8 有效负载。如果转换失败,Data 将保留为空,原始数据将出现在 Payload 属性中。

要阻止自动转换响应 Payload,请将 HTTPOptions.ConvertResponse 属性设置为 false。在这种情况下,Data 中将包含一个字符数据字符串或 uint8 字节向量。

属性:

GetAccess
public
SetAccess
public
Dependent
true

Data 属性的 Content-Type,指定为只读 matlab.net.http.MediaType 对象。此属性决定如何将 Data 属性的内容转换为有效负载或进行反向转换。如果 Content-Type 有一个具有字符集属性的 MediaType,则由该字符集决定编码方式。

此属性的值通常与对包含此 MessageBody 的消息中的 Content-Type 字段调用 convert 的结果相同。

您不需要在请求消息中设置 ContentType。当您创建 MessageBody 对象时,此属性为空。当您将 MessageBody 复制到请求消息中时,ContentType 将被设置为该消息中的 ContentTypeField 的值(如果有)。RequestMessage sendcomplete 方法会基于请求消息中的 Data 的类型和 ContentTypeField 的值来设置 ContentType

在响应消息中,ContentType 基于消息的 ContentTypeField

属性:

GetAccess
public
SetAccess
public
Transient
true

可以设置此属性以指示 ResponseMessagePayload 属性已编码。设置 ContentCoding 时,并未对有效负载进行任何处理,而且 Data 属性为空。

如果 MATLAB 收到一条消息,而消息的有效负载是使用它所支持的压缩算法(例如 gzipdeflate)编码的,则它会在进行其他任何转换之前自动解码该有效负载。如果解码成功,它会将解码的有效负载存储在 Payload 中,而将转换后的有效负载(如果有)存储在 Data 中。在这种情况下,此属性将为空,指示 Payload 未编码。

如果有效负载已编码但解码失败,或者您通过将 HTTPOptions.DecodePayload 属性设置为 false 禁用了解码,将在 Payload 中返回未处理的已编码有效负载,将 Data 保留为空,并将 ContentCoding 设置为字符串向量(代表响应消息中的 Content-Encoding 标头字段的值)。在这种情况下,您可以按原样保存 Payload(例如,写入到文件中),或者根据 ContentCoding 中指定的压缩算法进行处理。例如,如果值为 gzip,则您可以将数据写入到文件中,并使用 gunzip 命令来处理数据。

属性:

GetAccess
public
SetAccess
public
Transient
true

数据类型: string

消息中发送的原始字节,指定为 uint8 向量、标量字符串或字符向量。在请求消息中,为方便起见,您可以将 Payload 设置为标量字符串或字符向量。MATLAB 会将该值转换为 uint8 向量。在响应消息中,Payload 始终为 uint8 向量。

在请求消息中:

  • 将使用 ContentType 属性中指定或隐含的字符集(如果有)对标量字符串或字符向量进行转换,如果未设置,则使用 UTF-8 编码方式。要使用不同的编码方式,请自己进行编码,例如,使用 unicode2native 函数,并将生成的 uint8 向量转换为 Payload

  • 如果您不想对字节数组进行输出转换,请设置 Payload 属性,而非 Data 属性。如果您选择设置 Data,则当您在 RequestMessage.send 中指定了请求或历史记录返回参数时,或设置了 HTTPOptions.SavePayload 属性时,将会在 RequestMessage.complete 的返回值中(满足前者时),或者在 ResponseMessage 中(满足后者时)用已发送的字节填充 Payload

  • 当您设置 Payload 时,将清除 Data。如果您发送同时设置了 DataPayload 的消息,将发送 Payload 而忽略 Data。只有 sendcomplete 方法返回的响应消息和请求消息才可以同时设置这两个属性。

满足以下条件时,Payload 在响应消息中即为接收到的原始字节:

  • 您在 RequestMessage.send 方法中指定了历史记录返回参数。

  • 您将 HTTPOptions.SavePayload 属性设置为 true

  • 始终为 LogRecord 中显示的消息设置 Payload

  • 有效负载转换为 MATLAB 数据失败时。有关信息,请参阅 HTTPException.History 属性。

属性:

GetAccess
public
SetAccess
public
Dependent
true

方法

全部展开

版本历史记录

在 R2016b 中推出