主要内容

matlab.net.http.io.ContentProvider类

包:matlab.net.http.io
超类:处理matlab.mixin.Heterogeneous

HTTP消息有效负载的ContentProvider

描述

一个内容提供者为HTTP提供数据RequestMessage当消息正在发送时。一个简单的提供程序从MATLAB转换数据®键入字节流。更复杂的提供程序可以将数据流式传输到服务器,在发送数据的同时获取或生成数据,这避免了在消息开始之前将所有数据存储在内存中的需要。

通常,在向web服务发送数据时(通常在PUT或POST请求中),您将创建一个RequestMessage然后以a的形式插入数据MessageBody对象中的RequestMessage。身体财产。当你用RequestMessage.send, MATLAB将该数据转换为要发送到服务器的字节流,并根据消息的Content-Type和其中的数据类型进行转换的身体。数据.看到MessageBody。数据对于这些转换规则。

而不是插入MessageBody对象放入RequestMessage。身体属性,您可以创建内容提供者对象并插入它。然后,当您发送消息时,MATLAB调用内容提供者在发送消息时获取要发送的数据缓冲区。

是否插入MessageBody或者一个内容提供者进了短信,就叫来了RequestMessage.send在发送完整个消息并接收到响应或发生错误之前不返回(即被阻塞)。但是有一个内容提供者, MATLAB定期回调到提供程序中获取要发送的数据缓冲区,在此期间发送被阻塞。在这些回调中,你的内容提供者可以从任何来源获取数据,如文件、MATLAB数组、硬件传感器、MATLAB函数等。提供者的工作是将数据转换成字节流,以uint8缓冲区的形式,可以发送到web。

内容提供者是一个抽象类,为类作者设计了子类,使其具有自己的数据生成器或转换器,或者您可以使用(或子类)MATLAB提供程序之一,从各种来源为您生成数据,而无需编写子类。与将数据直接插入对象时发生的自动转换相比,这些提供程序提供的选项使您能够更灵活地控制如何获取和转换数据MessageBody.使用其中一个内容提供者子类:

即使您不需要流数据,使用这些提供程序之一也可以简化发送某些类型内容的过程,因为它们将数据从内部表单转换为uint8流。例如,FormProvider允许您向服务器发送表单响应,在服务器中您可以方便地将数据表示为数组QueryParameter对象。MultipartFormProvider允许您发送多部分表单响应,简化了多部分表单响应的创建。使用any内容提供者,您需要了解服务器希望您发送的内容类型。

matlab.net.http.io.ContentProvider类是a处理类。

子类的作者

最简单的方法内容提供者只需要实现getData方法,在MATLAB请求时提供数据缓冲区。要使用提供程序,请将其插入身体的性质RequestMessage.的第三个参数RequestMessage构造函数,MyProvider对象,进入身体

provider = MyProvider;req = matlab.net.http.RequestMessage('put', headers, provider);Resp = request .send(uri);

这是一个例子MyProvider类,它从作为参数传递给构造函数的文件名中读取并将其发送到web。为了更好地测量,我们在末尾或删除该提供程序时关闭该文件。

classdef MyProvider < matlab.net.http.io.ContentProvider properties FileID双端方法function obj = MyProvider(name) obj. .FileID = fopen(name);end function [data, stop] = getData(obj, length) [data, len] = fread(obj. length)FileID, length, '*uint8');Stop = len < length;if (stop) fclose(obj.FileID);obj。FileID = [];end end函数delete(obj) if ~isempty(obj. fileid) fclose(obj. fileid);obj。FileID = [];结束结束结束结束

MATLAB调用提供程序完整的在形成要发送的新消息时使用。其目的是允许提供者为新消息做准备,并向消息添加任何所需的报头字段。MATLAB调用提供程序开始方法,但在第一次调用之前getData

属性

全部展开

公共属性

消息或部分的报头字段,指定为一个或多个向量matlab.net.http.HeaderField对象。

此属性仅供子类作者使用。MATLAB在调用提供程序之前设置此属性完整的方法。对于非多部分消息,MATLAB将此属性初始化为的内容请求。头,减去任何matlab.net.http.field.GenericFields或者空值字段。的内容提供者使用此属性可添加描述要发送的数据的报头字段,或向消息中已有的报头字段添加参数。在委托中MultipartProvider, MATLAB将此属性初始化为委托提供程序打算为部件插入的头字段。委托可以修改或更改这些字段。

从供应商的完整的方法,如果这不是一个多部分消息,那么MATLAB将读取此属性并将其内容合并到请求.这里的字段的名字没有出现在请求。头都加在请求。头.如果这是一个字段有一个名字这和1 in是一样的请求。头,两者都有非空,那么:

  • 如果是在请求。头是一个GenericField,然后忽略其中的一个

  • 如果是在请求。头不是。GenericField,然后把它换成

如果其中一个或两个都是空的价值,然后将字段从请求。头并且它不是作为正常消息完成的一部分添加的。

如果这是a的委托MultipartProvider,然后这个的全部内容用作部件的标题。多成员代表不能这样认为请求。头包含属于它们自己的任何字段.提供程序可以通过检查是否为多部分委托来确定它是否是MyDelegator是一个MultipartProvider尽管这种测试不太可能被需要。

MATLAB仅在调用提供程序返回时读取此属性完整的方法。一旦MATLAB调用,对该数组的更改将被忽略开始

类作者应该意识到,他们的子类可能已经向this添加了字段(在他们完整的方法),然后调用完整的在它们的超类中。最好保留这些字段,不要添加具有相同名称的字段。但是,允许向字段添加参数。例如,超类可以向没有字符集参数的现有Content-Type字段添加字符集参数。

属性:

GetAccess
公共
SetAccess
公共

指示是否强制分块传输编码,指定为布尔值。此属性仅对子类作者感兴趣,并且仅适用于非多部分委托的提供程序。子类集ForceChunked控制是否应使用分块传输编码发送内容。如果(默认),MATLAB根据是否知道消息准备发送时的内容长度来决定是否发送内容块:

  • 如果MATLAB知道内容长度(如果消息包含content - length字段,或者如果此提供程序的expectedContentLength方法返回一个数字),然后MATLAB决定是否发送分块。

  • 如果MATLAB不知道内容长度(没有content - length字段在头和expectedContentLength返回空),那么MATLAB总是发送消息块。

如果ForceChunked真正的,则MATLAB不管是否知道内容长度,都将消息分块发送,除非已知长度小于块大小。如果这个属性是真正的,则消息必须不包含Content-Length字段,因为HTTP不允许分块消息具有Content-Length字段。方法中仍然可以返回非零值expectedContentLength方法,如果您希望MATLAB验证您正在返回预期的数据长度。

当MATLAB选择发送消息块时,每个块的大小等于返回数据的长度getData

函数后读取该值完整的方法,在调用之前开始.它不设置此字段。

属性:

GetAccess
公共
SetAccess
公共

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

此属性仅供子类作者使用。的RequestMessage.sendRequestMessage.complete方法将此属性设置为RequestMessage在谁的身体在调用此提供程序中的任何其他方法之前,以及在添加任何附加报头字段或验证消息之前,已放置此提供程序。提供者可以检查此消息以查看原始请求中包含的内容。

委托将看到与委托相同的属性值。内容提供者应该意识到,如果它们是委托,它们不一定提供请求消息的整个主体,因此它们不应该假设此请求中的报头字段与它们提供的数据相关。通常,委托应该忽略请求中与数据相关的报头字段,例如Content-Type。

如果提供程序希望向此消息添加任何报头字段,或者修改现有的报头字段,它应该在其完整的方法中添加这些字段财产。打电话的人完整的RequestMessage或委托提供程序)决定如何处理这些字段。RequestMessage.sendRequestMessage.complete总是将这些字段复制到RequestMessage.委托提供程序可以将字段复制到自己的提供程序中属性或将它们插入到消息中(如MultipartProvider)。有关更多信息,请参见财产。

该属性是只读的。

属性:

GetAccess 公共
SetAccess matlab.net.http.RequestMessage

受保护的属性

内容提供者此提供程序正在委托的对象,指定为matlab.net.http.io.ContentProvider对象。方法在调用提供程序(委托程序)中设置此属性delegateTo方法来指示当前委托的提供程序。如果当前没有委托,则该值为空。

完整的方法将此属性设置为空。

属性:

GetAccess
受保护的
SetAccess
受保护的

内容提供者委托给此提供程序,指定为matlab.net.http.io.ContentProvider对象。

如果一个内容提供者将发送全部或部分消息数据的责任委托给另一个提供者,然后此属性将委托提供者标识为委托。例如,aMultipartProvider将消息的部分委托给其他提供程序,因此它在每个委托中为自己插入句柄。否则,MyDelegator是空的。的delegateTo方法在委托中设置此属性。

属性:

GetAccess
受保护的
SetAccess
受保护的

方法

全部展开

更多关于

全部展开

在R2018a中引入