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 中推出