send
类: matlab.net.http.RequestMessage
命名空间: matlab.net.http
发送 HTTP 请求消息并接收响应
语法
说明
[
向 response
,completedrequest
,history
] = send(request
,uri
)uri
指定的 Web 服务发送 request
消息,并返回 response
(如果有)。如果未指定 request.Method
属性,则 send
方法会将该属性设置为 'GET'
。
默认情况下,send
会验证消息的标头及其他部分在语义上是否正确并完成 uri
。此方法还为格式正确的请求填写任何必需的标头字段。如果 request.Body
是尚未设置 Payload
属性的 MessageBody
,则 send
会调用适当的转换函数,将任何 request.Body.Data
转换为表示要发送的 HTTP 有效负载的字节向量,就像 MessageBody.Data
的说明中那样。通常,'GET'
请求不包含数据,但无论 RequestMethod
是什么,此方法都会发送 Body
。如果服务器在其响应中返回数据并且未指定 consumer
,则 send
会将该数据转换为 MATLAB® 数据并保存在 response.Body.Data
中。有关数据转换的详细信息,请参阅 MessageBody.Data
。
如果 request.Body
是 ContentProvider
,MATLAB 将调用该提供程序以获取要发送的数据。
如果标头中已经包含此方法通常会添加的某个字段,send
将验证该字段是否具有期望的值。您可以按如下所示覆盖默认行为。
要按原样发送消息,而不检查或更改标头,请在发送之前将
request.Completed
属性设置为true
。如果您使用complete
方法来完成请求,则为uri
和options
指定的值应该与您提供给complete
的值相同,否则可能会产生不可预测的结果。即使设置了Completed
,RequestLine
中未指定的字段也会填入默认值。要允许
send
方法检查和更改标头,但禁止添加可能会由send
或ContentProvider
添加的特定标头字段,请将该字段添加到request.Header
中并为其指定空值 ([]
)。例如,send
会自动添加 User-Agent 标头字段。如果您不希望出现这种行为,请将HeaderField('User-Agent')
添加到标头中。具有空值的标头字段不会包含在消息中。Host 和 Connection 字段无法禁止。要覆盖
send
方法为给定标头字段添加的值,请在发送或完成消息之前添加您自己的该字段实例。但是,这不会覆盖ContentProvider
可能添加的标头字段。然而,对于某些标头字段类型,如果值无效,send
仍可能会拒绝该消息。要阻止对给定字段的值进行任何检查,或者要覆盖ContentProvider
添加的字段,请将matlab.http.field.GenericField
类型的字段添加到标头中并指定所需的名称和值。send
和ContentProvider
都不会添加与任何GenericField
标头同名的标头字段,也不会检查它们的正确性。要发送未经转换的原始二进制数据,您可以将
uint8
向量插入到Body.Data
或Body.Payload
中。唯一的区别在于Body.Data
中的数据会根据消息中的 Content-Type 字段进行转换,而Body.Payload
不会。如果Body.Payload
为空,即使已设置Completed
,send
也始终会尝试转换非空Body.Data
。有关转换规则,请参阅MessageBody.Data
。
输入参数
输出参量
示例
错误的处理方式
始终检查 response
Status
属性以确定请求是否被接受。出错情况包括:
MException
- 消息格式不正确,无法完成。HTTPException
- 消息已完成,但 Web 服务不可访问或者未在options
指定的超时期限内做出响应。response
的Status
属性 - Web 服务做出响应并返回 HTTP 错误状态。send
正常返回,将Status
属性设置为从服务器返回的错误。
版本历史记录
在 R2016b 中推出