主要内容

发送

类:matlab.net.http.RequestMessage
包:matlab.net.http

发送HTTP请求消息并接收响应

描述

例子

响应completedrequest历史] =发送(请求uri发送请求指定的web服务uri并返回响应,如果任何。如果没有请求。方法属性,则发送方法将属性设置为“得到”

默认情况下,发送验证消息头和其他部分的语义正确性,并完成uri.该方法还为正确格式的请求填充任何必需的报头字段。如果请求。身体是一个MessageBody谁的有效载荷属性尚未设置,则发送调用适当的转换函数来转换任意request.Body.Data到表示要发送的HTTP有效负载的字节向量,如所述MessageBody。数据.通常,“得到”请求不包含数据,但是方法发送身体不管RequestMethod.如果服务器在响应中返回数据,并且没有消费者是指定的,那么发送将数据转换为MATLAB®数据并保存在其中response.Body.Data.看到MessageBody。数据有关数据转换的更多信息。

如果请求。身体是一个内容提供者,然后MATLAB调用提供程序以获取要发送的数据。

如果报头已经包含该方法通常添加的字段,则发送验证字段是否具有预期值。您可以按照如下方式覆盖默认行为。

  • 要按原样发送消息而不检查或更改消息头,请设置请求。完成财产真正的在发送之前。如果你使用完整的方法来完成请求,则应指定相同的值uri选项你提供给我的完整的,否则可能会有不可预测的结果。即使完成设置时,RequestLine将用默认值填充。

  • 允许发送方法检查和更改报头,但禁止添加特定的报头字段发送或者一个内容提供者可以把这个字段添加到请求。头为空值([]).例如,发送自动添加User-Agent报头字段。如果您不想要这种行为,那么添加HeaderField(“用户代理”)头。消息中不包括空值的报头字段。主机和连接字段不能被抑制。

  • 重写发送方法为给定报头字段添加,在发送或完成消息之前添加该字段的自己的实例。然而,这将不会覆盖一个头字段内容提供者但是,对于某些报头字段类型,发送如果值无效,仍然可能拒绝消息。为了防止对给定字段的值进行任何检查,或重写某个字段内容提供者添加,添加一个类型字段matlab.http.field.GenericField以所需的名称和值写入头文件。既不发送也不是一个内容提供者将添加名称等于any的任何头字段GenericField标头,不会检查其正确性。

  • 要发送未经转换的原始二进制数据,可以插入uint8向量分为的身体。数据的身体。有效载荷.唯一的区别是的身体。数据根据消息中的Content-Type字段进行转换,而的身体。有效载荷不是。发送总是尝试转换为非空的身体。数据如果的身体。有效载荷是空的,即使完成已经设置。看到MessageBody。数据转换规则。

例子

响应completedrequest历史] =发送(请求uri选项消费者提供处理请求响应消息。

输入参数

全部展开

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

消息目的地,指定为matlab.net.URI对象或构造函数可接受的字符串或字符向量。如果值为aURI对象,则必须命名一个Host。如果是字符串且不包含Scheme,则“http”假定。例如,“www.somewebsite.com”/ / www.somewebsite.com的都被视为“http://www.somewebsite.com”

附加选项,指定为matlab.net.http.HTTPOptions对象,用于处理请求和响应消息。如果未指定,或者值为空,则发送使用默认选项。

用于处理返回的有效负载的内容使用者,指定为matlab.net.http.io.ContentConsumer对象或函数句柄,该函数返回ContentConsumer

发送方法调用的ContentConsumer在接收数据时实时处理或存储数据缓冲区。的消费者可以存储数据在response.Body.Data或者用其他方法处理。例如,使用者可以在图形窗口中显示数据或将其保存在文件中。当指定消费者时,MATLAB不会自动设置MessageBody。数据,但它会落下MessageBody。有效载荷到未转换的有效载荷,如果选项。SavePayload是真的。例如,一个FileConsumer将数据保存到文件中,而不是MessageBody。数据

使用一个ContentConsumer提供了更灵活的转换或存储响应数据比默认的MATLAB响应数据转换。有关接收数据的默认转换的说明,请参见MessageBody。数据.查看ContentConsumer类型MATLAB提供,类型:

议员= ? matlab.net.http.io.ContentConsumer;{mp.ContainingPackage.ClassList.Name}’

此外,软件开发人员可以创建自己的软件ContentConsumer在接收数据时处理数据的子类。

消费者仅在接受消息时使用,基于各种因素,如响应以及是否响应。状态Code好吧.每一个消费者有自己的接受消息的标准。

如果使用支持的编码压缩有效负载,则金宝app选项未指明的或选项。DecodePayload为,则使用者获取解压后的数据。如果有效载荷被压缩选项。DecodePayload为false,或使用不支持的编码压缩有效负载,则不使用使用者,且不存在对数据的默认处理。金宝app

在所有没有使用使用者的情况下,有效负载将被处理和转换,就好像没有消费者是指定的。

如果消费者是一个函数句柄,只有在MATLAB确定响应具有有效负载后,才调用该函数实例化消费者。

当指定消费者但是没有选项,添加一个占位符[]理由选项使用默认选项。

输出参数

全部展开

从服务器接收的消息,作为matlab.net.http.ResponseMessage对象。如果涉及到重定向和/或身份验证,MATLAB和代理或服务器之间可能会交换中间请求和响应。

的请求之前发送的响应参数,作为matlab.net.http.RequestMessage对象。的发送方法增加completedrequest使用身份验证或重定向信息参数。

如果请求。身体是一个内容提供者,然后completedrequest。身体通常为空,因为内容提供者有效载荷不会被保存。然而,如果选项。SavePayload是真的,那么completedrequest。身体是一个MessageBody谁的有效载荷是否将数据作为a从提供者发送uint8向量。在某些情况下,如果请求的Content-Type表明它是基于字符的,则MessageBody。数据属性包含表示为字符串的有效负载。

发送HTTP请求后,检查completedrequest参数查看发送了什么。例如,如果发生了重定向或身份验证交换,服务器可能会发送多个消息。如果有多条消息,那么completedrequest包含最后一个请求。要查看第一个或中间信息,请查看历史论点。

要多次发送同一个请求,请调用RequestMessage.complete方法:

[completedrequest,目标]=完成(请求uri)

然后,调用发送方法的输出参数如下:

resp =发送(completedrequest、目标)

消息的日志,作为向量返回matlab.net.http.LogRecord为满足此要求而交换的对象发送请求。如果只有一个请求和响应,则历史参数包含一条记录。如果身份验证包含多个消息,则每个重定向的历史可以包含多个日志记录。

使用历史记录从响应消息中获取所有的Set-Cookie头。您可以在后续请求中将这些头发送回服务器。

历史中的最后一条记录包含与completedrequest响应参数,除了身体财产。要记录消息体,请指定SavePayload财产的选项论点。

历史记录对调试也很有用。

例子

全部展开

发送HTTP消息来读取MathWorks联系方式支持网页并显示消息状态代码。金宝app

进口matlab.net。*进口matlab.net.http。*r = RequestMessage;uri = uri (“//www.tatmou.com/金宝appsupport/contact_us”);resp =发送(r, uri);状态=职责。StatusCode
状态=好

防止消息重定向mathworks.com通过设置HTTP选项MaxRedirects为零。然后显示状态码信息。

进口matlab.net。*进口matlab.net.http。*r = RequestMessage;uri = uri (“//www.tatmou.com/金宝appsupport/contact_us”);选择= HTTPOptions (“MaxRedirects”, 0);[职责,~,嘘]=发送(r, uri,选项);状态= getReasonPhrase (resp.StatusCode)
status = '永久移动'

错误处理

总是检查响应状态属性确定请求是否已被接受。错误条件是:

  • MException-消息格式不正确,无法完成。

  • textbox—消息完成,但web服务不可达或在指定的超时时间内没有响应选项

  • 状态的属性响应Web服务响应并返回HTTP错误状态。发送正常返回,设置状态属性设置为从服务器返回的错误。

介绍了R2016b