matlab.net.http.io.StringProvider 类
命名空间: matlab.net.http.io
超类: matlab.net.http.io.ContentProvider
发送 MATLAB 字符串的 ContentProvider
描述
使用 StringProvider
对象在 RequestMessage
中发送 MATLAB® 字符串或字符向量。默认情况下,如果 RequestMessage.Body.Data
属性包含字符串或字符向量,将会根据消息中的 Content-Type 字段指定或暗示的编码(字符集)将其转换为二进制,因此在 MATLAB 能够确定要使用哪种编码的情况下,您通常不需要使用此对象来发送纯文本。
在 Request.Body
属性中使用此对象可以发送使用不同字符集(不同于 MATLAB 为标头中的 Content-Type 使用的字符集)编码的字符串。您可以在 ContentProvider
构造函数中指定字符集,也可以通过设置 Charset
属性来指定。如果消息中不包含 Content-Type,此提供程序将添加一个标头字段,指明 "text/plain"
和指定的字符集。
matlab.net.http.io.StringProvider
类是一个 handle
类。
创建对象
描述
provider = StringProvider
构造一个 StringProvider
,以发送 Data
属性中使用 Charset
中指定的值编码的数据。需要在发送包含此提供程序的消息之前设置这些属性。
provider = StringProvider(
构造一个 data
,charset
)StringProvider
,以发送使用指定 charset
编码的指定 data
。构造函数将 Data
属性设置为 data
的值,将 Charset
属性设置为 charset
的值。charset
参量为可选参量。
属性
公共属性
Data
— 要发送的数据
字符串 | 字符向量
要发送的数据,指定为字符串或字符向量。这是提供给构造函数的 Data 的值。您也可以在调用构造函数后或在子类中直接设置此属性。
子类编写者可以随时将此属性设置为新数据。下一次调用 getData
将根据 getData
length
参量的值转换此数据。
属性:
GetAccess | public |
SetAccess | public |
Dependent | true |
Charset
— 用于编码的字符集
''
(默认) | 字符向量
用于编码的字符集,指定为字符向量。
属性:
GetAccess | public |
SetAccess | public |
Dependent | true |
Header
— 消息或组成部分的标头字段
matlab.net.http.HeaderField.empty
(默认) | matlab.net.http.HeaderField
消息或组成部分的标头字段,指定为由一个或多个 matlab.net.http.HeaderField
对象组成的向量。
此属性仅供子类编写者使用。MATLAB 在调用提供程序的 complete
方法之前设置此属性。对于非 Multipart 消息,MATLAB 将此属性初始化为 Request.Header
的内容减去任何 matlab.net.http.field.GenericFields
或空值字段。ContentProvider
使用此属性添加对要发送数据进行描述的标头字段,或者向消息中已有的标头字段中添加参数。在 MultipartProvider
的代理中,MATLAB 将此属性初始化为委托方提供程序打算为该部分插入的标头字段。代理可以修改或更改这些字段。
从提供程序的 complete
方法返回时,如果这不是 Multipart 消息,则 MATLAB 会读取此属性并将其内容与 Request
的标头合并。此 Header
中 Names
未出现在 Request.Header
中的字段将被添加到 Request.Header
的末尾。如果此 Header
中的某个字段与 Request.Header
中的某个字段具有相同的 Name
,而且都具有非空 Values
,则:
如果
Request.Header
中的字段是GenericField
,则忽略Header
中的字段。如果
Request.Header
中的字段不是GenericField
,则将其替换为Header
中的字段。
如果两个字段或其中之一具有空 Value
,则将该字段从 Request.Header
中删除,且不会添加为正常的完整消息的一部分。
如果这是 MultipartProvider
的代理,则将此 Header
的全部内容用作该部分的标头。Multipart 代理绝不能假定 Request.Header
包含的任何字段与自己的 Header
相关。提供程序可以通过检查 MyDelegator
是否为 MultipartProvider
来确定它是否为 Multipart 代理,尽管需要进行这种检验的可能性并不大。
MATLAB 仅在调用提供程序的 complete
方法返回时读取此属性。一旦 MATLAB 调用 start
,对此数组所做的更改将被忽略。
类编写者应该明白,在超类中调用 complete
之前,子类可能已经向此 Header
中添加字段(在子类的 complete
方法中)。最好保留这些字段,而且不要添加同名字段。但是,为字段添加参数是可以的。例如,超类可以为没有字符集参数的现有 Content-Type 字段添加一个字符集参数。
属性:
GetAccess | public |
SetAccess | public |
ForceChunked
— 指示是否强制进行分块传输编码
false
(默认) | true
指示是否强制进行分块传输编码,指定为布尔值。此属性仅对子类编写者有用,并且仅适用于不是作为 Multipart 代理的提供程序。子类通过设置 ForceChunked
来控制是否应使用分块传输编码发送内容。如果为 false
(默认值),MATLAB 将根据消息待发送时是否了解消息的内容长度来决定是否发送分块内容:
如果 MATLAB 知道内容长度(例如,消息中包含 Content-Length 字段,或者此提供程序的
expectedContentLength
方法返回一个数字),则由 MATLAB 决定是否发送分块消息。如果 MATLAB 不知道内容长度(标头中没有 Content-Length 字段而且
expectedContentLength
返回空),则 MATLAB 始终发送分块消息。
如果 ForceChunked
为 true
,则无论 MATLAB 是否知道内容长度都会发送分块消息,除非已知长度小于块大小。如果此属性为 true
,则消息中不能包含 Content-Length 字段,因为 HTTP 不允许分块消息具有 Content-Length 字段。但是,如果您希望 MATLAB 验证您返回的是预期的数据长度,则仍可以在 expectedContentLength
方法中返回非零值。
当 MATLAB 选择发送分块消息时,每个块的大小等于 getData
返回的数据长度。
MATLAB 在调用 complete
方法之后、调用 start
之前读取此值。它不会设置此字段。
属性:
GetAccess | public |
SetAccess | public |
Request
— 要发送的请求消息
matlab.net.http.RequestMessage
要发送的请求消息,指定为 matlab.net.http.RequestMessage
对象。
此属性仅由子类编写者使用。在调用此使用程序中的其他方法之前,以及在添加其他标头字段或验证消息之前,RequestMessage.send
和 RequestMessage.complete
方法将此属性设置为此提供程序原来所在的 Body
的 RequestMessage
。提供程序可以检查此消息,以查看原始请求中包含的内容。
代理与委托方看到的此属性值是相同的。ContentProviders
应该明白,如果它们是代理,则不一定提供请求消息的完整主体,因此不应该假定此 Request 中的标头字段与它们提供的数据相关。通常,代理应忽略此请求中与数据相关的标头字段,例如 Content-Type。
如果提供程序希望为此消息添加任何标头字段或修改现有标头字段,应在其 complete
方法中将这些字段添加到 Header
属性中。complete
的调用方(RequestMessage
或委托方提供程序)决定如何处理这些字段。RequestMessage.send
和 RequestMessage.complete
始终将这些字段复制到 RequestMessage
的 Header
中。委托方提供程序可将这些字段复制到自己的 Header
属性中,或者将它们插入到消息中(就像在 MultipartProvider
中那样)。有关详细信息,请参阅 Header 属性。
此属性是只读的。
属性:
GetAccess | public |
SetAccess | matlab.net.http.RequestMessage |
受保护的属性
CurrentDelegate
— 接受此提供程序委托的 ContentProvider
matlab.net.http.io.ContentProvider
| 空
接受此提供程序委托的 ContentProvider
,指定为 matlab.net.http.io.ContentProvider
对象。此属性在调用方提供程序(委托方)中由 delegateTo
方法设置,以指示当前接受委托的提供程序。如果当前没有委托,则此值为空。
complete
方法将此属性设置为空。
属性:
GetAccess | protected |
SetAccess | protected |
MyDelegator
— 向此提供程序进行委托的 ContentProvider
matlab.net.http.io.ContentProvider.empty
(默认) | matlab.net.http.io.ContentProvider
向此提供程序进行委托的 ContentProvider
,指定为 matlab.net.http.io.ContentProvider
对象。
如果 ContentProvider
将发送全部或部分消息数据的责任委托给另一个提供程序,则此属性向代理标识委托方提供程序。例如,MultipartProvider
将消息的各个部分委托给其他提供程序,因此它会在每个代理中插入自己的句柄。否则,MyDelegator
为空。delegateTo
方法在代理中设置此属性。
属性:
GetAccess | protected |
SetAccess | protected |
方法
公共方法
getData | 要在 HTTP 请求消息中从 StringProvider 发送的下一个数据缓冲区 |
专用运算符和函数
这些方法将标准的 MATLAB 运算符和函数以及继承的方法应用于此类中的对象。
string | 以字符串形式返回提供程序信息 |
show | 显示提供程序信息 |
受保护方法
complete | 完成 StringProvider 的 HTTP 标头 |
preferredBufferSize | ContentProvider 的首选缓冲区大小 |
expectedContentLength | ContentProvider 的内容长度 |
start | 开始从 StringProvider 进行数据传输 |
restartable | 指示 ImageProvider 是否可重启 |
reusable | 指示 ImageProvider 是否可重用 |
delegateTo | 委托给另一个提供程序 |
示例
使用 StringProvider
以下代码准备一条消息,该消息使用 Content-Type "text/plain"
向使用 Shift_JIS 编码的服务器发送字符串 "myText"
:
ctf = ContentTypeField(MediaType('text/plain','charset','Shift_JIS'); r = RequestMessage('put',ctf,StringProvider('myText'));
在此示例中,标头没有 Content-Type 字段,因此 StringProvider
根据构造函数参量插入一个标头字段。
r = RequestMessage('put',[],StringProvider('myText','Shift_JIS')); show(r.complete('www.someurl.com'))
PUT / HTTP/1.1 Host: www.someurl.com Content-Type: text/plain; charset=Shift_JIS User-Agent: MATLAB/9.2.0.512567 (R2017b) Connection: close Date: Fri, 20 Jun 2017 14:26:42 GMT
在此示例中,为 StringProvider
构造函数指定的用于转换数据的字符集不同于 Content-Type 字段中的字符集。StringProvider
不会更改已经指定字符集的现有 Content-Type 字段,因此服务器假定数据为 US-ASCII,而不是 Shift-JIS。
ctf = ContentTypeField(MediaType('text/plain','charset','US-ASCII')); r = RequestMessage('put',ctf,StringProvider('myText','Shift_JIS'));
在此示例中,MATLAB 在未指定字符集的 Content-Type 字段中添加一个字符集参数,因为 "application/json"
的默认值为 UTF-8,与 Shift_JIS 不同。
ctf = ContentTypeField(MediaType('application/json')); r = RequestMessage('put',ctf,StringProvider('myText','Shift_JIS')); show(r.complete('www.someurl.com'))
PUT / HTTP/1.1 Host: www.someurl.com Content-Type: application/json; charset=Shift_JIS User-Agent: MATLAB/9.2.0.512567 (R2017b) Connection: close Date: Fri, 20 Jun 2017 14:26:42 GMT
当没有 Content-Type 标头字段并且没有为 StringProvider
指定字符集时,MATLAB 将使用启发式方法查找可以表示数据的“最小”编码,其中一个包括平台的默认编码。在此示例中,在 Windows 上运行时,字符串中的 Unicode® 字符在 Windows-1252 范围内,但在 US-ASCII 范围之外,因此使用 Windows-1252:
r = RequestMessage('put',[],StringProvider('€abc')); show(r.complete('www.someurl.com'))
PUT / HTTP/1.1 Host: www.someurl.com Content-Type: text/plain; charset=windows-1252 User-Agent: MATLAB/9.2.0.512567 (R2017b) Connection: close Date: Fri, 20 Jun 2017 14:26:42 GMT
在这种情况下,Content-Type 字段指定没有字符集的 "application/json"
,并且没有为 StringProvider
指定字符集。由于 "application/json"
的默认字符集是 UTF-8,因此 StringProvider
使用它进行转换,并且不在 Content-Type 字段中显式指定字符集。
ctf = ContentTypeField(MediaType('application/json')); r = RequestMessage('put',ctf,StringProvider('myText')); % uses UTF-8
详细信息
类层次结构
版本历史记录
在 R2018a 中推出
另请参阅
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)