Main Content

complete

类: matlab.net.http.RequestMessage
命名空间: matlab.net.http

验证并完成 HTTP 请求消息而不发送

说明

[completedrequest,target] = complete(request,uri) 可像 RequestMessage.send 方法一样添加和验证消息标头字段并转换数据,但不会发送消息。complete 采用默认的 HTTPOptions 对象来确定如何完成和验证请求。

可以使用 complete 方法检查请求消息的内容,以实现调试目的。

为了填充和验证 HeaderRequestLine 属性,此方法将忽略 request 中的 Completed 属性。此方法始终返回修改后的 completedrequest。如果 request 未完成,此方法将出错。您可以根据此行为判断手动完成的请求是否有效。

如果未设置 Completed,则此方法始终转换 request.Body 中的 Data,并将结果存储在 completedrequest.Body.Payload 中,覆盖以前的任何 Payload 内容。这意味着 completedrequest.Body 中的 DataPayload 都包含值。这与 send 方法的行为不同,该方法不会保存 Payload,除非设置了 HTTPOptions.SavePayload。如果消息中包含大量数据,则内存使用量和转换时间可能是个问题。

但是,如果 request.Body 包含 ContentProvider,则 complete 不会调用该提供程序来创建数据。completedrequest.Body 包含相同的 ContentProvider

示例

[completedrequest,target] = complete(request,uri,options) 为验证和完成请求消息提供了更多选项。

如果您打算发送 completedrequest 以避免重复验证的成本,请使用相同的 options 将它发送给 target,而不是发送给 uri。通过 send 方法添加的时间依赖的标头字段(如 Date)在使用 completedrequest 再次发送时不会更新。

输入参数

全部展开

请求消息,指定为 matlab.net.http.RequestMessage 对象。

消息目标,指定为 matlab.net.URI 对象或者可被构造函数接受的字符串或字符向量。

用于处理请求消息和响应消息的其他选项,指定为 matlab.net.http.HTTPOptions 对象。

输出参量

全部展开

已完成并验证的请求,以 matlab.net.http.RequestMessage 对象形式返回。Completed 属性为 true。

已完成的 URI,以 matlab.net.URI 对象形式返回。

示例

全部展开

创建针对一个虚构网站的请求消息。然后验证并完成请求,而不发送。

request = matlab.net.http.RequestMessage();
url = 'myschool.edu/campus.jpg';
options = matlab.net.http.HTTPOptions('SavePayload',true);
[request,url] = complete(request,url,options);
show(request)
GET /campus.jpg HTTP/1.1
Host: myschool.edu
User-Agent: MATLAB/9.0.0.366741 (R2016b)
Date: Wed, 13 Jul 2016 17:21:08 GMT
Connection: close

MATLAB® 将显示与您的系统相关的 User-AgentDate 值。

显示更新后的 URL。

string(url)
ans = http://myschool.edu/campus.jpg

局限性

  • 即使在 options 中设置了 Authenticate 属性,已完成的请求也不会添加向服务器或代理进行身份验证可能需要的任何授权标头字段。如果不发送消息,可能无法确定服务器需要的内容。要查看身份验证交换中发送的内容,请检查 send 方法返回的 completedrequesthistory 参量。

提示

  • 要重复发送同一个请求消息,请发送 completedrequest。否则,如果您发送 request,MATLAB 将反复验证该消息。此外,还必须指定 target 作为 URI,并指定相同的 options 输入参量。发送 completedrequest 时,不会更新 send 方法添加的与时间有关的标头字段,例如 Date。

  • 要完成消息而不转换数据,请在调用 complete 方法之前将 Completed 属性设置为 true。如果 Completed 为 true 且 request.BodyMessageBody 对象,则 complete 方法假定 request.Body.Payload 的当前值正是所需要的值,即使为空也是如此。

    此行为不同于 send 方法。如果 request.Body.Payload 为空,即使 Completed 为 true,send 也会转换并发送非空 Body.Data 值。

版本历史记录

在 R2016b 中推出