matlab.net.http.io.StringProvider クラス
名前空間: matlab.net.http.io
スーパークラス: matlab.net.http.io.ContentProvider
MATLAB string を送信する ContentProvider
説明
StringProvider
オブジェクトを使用して、RequestMessage
で MATLAB® string または文字ベクトルを送信します。既定の設定では、RequestMessage.Body.Data
プロパティに string または文字ベクトルが含まれていると、メッセージの Content-Type フィールドで明示的または暗黙的に指定されたエンコード (charset) に従って 2 進数に変換されるため、通常、使用するエンコードを MATLAB で判別できる場合、プレーン テキストの送信にこのオブジェクトを使用する必要はありません。
Request.Body
プロパティでこのオブジェクトを使用し、MATLAB がヘッダーで Content-Type に使用するものとは異なる可能性のある charset を使用してエンコードされた string を送信します。この charset は ContentProvider
コンストラクターで、または Charset
プロパティを設定して指定します。メッセージに Content-Type が含まれていない場合、このプロバイダーは "text/plain"
と指定された charset を指定してそれを追加します。
matlab.net.http.io.StringProvider
クラスは handle
クラスです。
作成
説明
provider = StringProvider
は StringProvider
を作成し、Charset
プロパティで指定した値でエンコードされた Data
プロパティ内のデータを送信します。これらのプロパティは、このプロバイダーが含まれるメッセージを送信する前に設定します。
provider = StringProvider(
は data
,charset
)StringProvider
を作成し、指定した charset
でエンコードされた指定した data
を送信します。コンストラクターは Data
プロパティを data
の値に、Charset
プロパティを charset
の値に設定します。charset
引数はオプションです。
プロパティ
パブリック プロパティ
Data
— 送信するデータ
string | 文字ベクトル
送信するデータ。string または文字ベクトルとして指定します。これは、コンストラクターに指定されたデータの値です。このプロパティは、コンストラクターを呼び出した後またはサブクラス内で直接設定することもできます。
サブクラスの作成ではこのプロパティを新しいデータにいつでも設定できます。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
メッセージまたはパートのヘッダー フィールド。1 つ以上の matlab.net.http.HeaderField
オブジェクトのベクトルとして指定されます。
このプロパティはサブクラスの作成にのみ使用されます。このプロパティは、プロバイダーの complete
を呼び出す前に MATLAB で設定されます。マルチパート メッセージ以外については、このプロパティは、MATLAB によって matlab.net.http.field.GenericFields
や値が空のフィールドを除いた Request.Header
の内容に初期化されます。ContentProvider
では、送信するデータを示すヘッダー フィールドを追加したり、メッセージの既存のヘッダー フィールドにパラメーターを追加したりする場合にこのプロパティを使用します。MultipartProvider
のデリゲートでは、このプロパティは、MATLAB によってデリゲート元のプロバイダーが挿入するパート用のヘッダー フィールドに初期化されます。これらのフィールドはデリゲートで変更が可能です。
マルチパート メッセージ以外では、プロバイダーの complete
メソッドから戻ると、MATLAB はこのプロパティを読み取って、その内容を Request
のヘッダーにマージします。この Header
に含まれるフィールドの Names
が Request.Header
にない場合、Request.Header
の末尾に追加されます。この Header
に含まれるフィールドの Name
が Request.Header
に含まれるフィールドと同じで、どちらの Values
も空でない場合は、次のように処理されます。
Request.Header
のフィールドがGenericField
の場合、Header
のフィールドは無視されます。Request.Header
のフィールドがGenericField
でない場合、Header
のフィールドに置き換えられます。
これらの一方または両方の Value
が空の場合は、Request.Header
からフィールドが削除され、メッセージの正常な終了時にも追加されません。
MultipartProvider
のデリゲートの場合は、この Header
の内容全体がパートのヘッダーとして使用されます。マルチパート デリゲートでは、Request.Header
にその Header
に付随する任意のフィールドが含まれていると想定してはなりません。プロバイダーがマルチパート デリゲートであるかどうかは MyDelegator
が MultipartProvider
かどうかを確認すれば特定できますが、このテストが必要になることはほとんどありません。
このプロパティが MATLAB で読み取られるのは、プロバイダーの complete
メソッドの呼び出しから戻るときだけです。MATLAB で start
が呼び出された後は、この配列に対する変更は無視されます。
クラスを作成するときは、スーパークラスで complete
を呼び出す前に、この (complete
メソッド内の) Header
にサブクラスがフィールドを追加済みの場合があることを認識しておく必要があります。それらのフィールドは残しておいて、同じ名前のフィールドを追加しないようにすることを推奨します。ただし、フィールドへのパラメーターの追加は可能です。たとえば、既存の Content-Type フィールドに charset パラメーターがない場合、スーパークラスで追加できます。
属性:
GetAccess | public |
SetAccess | public |
ForceChunked
— チャンク転送コーディングを強制するかどうかを示す
false
(既定値) | true
チャンク転送コーディングを強制するかどうかを示します。boolean として指定されます。これはサブクラスの作成にのみ関係するプロパティで、マルチパート デリゲート以外のプロバイダーにのみ該当します。サブクラスでは、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
オブジェクトとして指定されます。
このプロパティはサブクラスの作成にのみ使用されます。このプロパティは、このプロバイダーで他のメソッドを呼び出す前であり、かつヘッダー フィールドを追加したりメッセージを検証したりする前に、このプロバイダーが Body
に配置された RequestMessage
に RequestMessage.send
メソッドと RequestMessage.complete
メソッドで設定されます。プロバイダーは、このメッセージを調べて元の要求の内容を確認できます。
デリゲートの場合、このプロパティの値はデリゲーターと同じになります。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 | StringProvider から HTTP 要求メッセージで送信するデータの次のバッファー |
特殊な演算子と関数
次のメソッドは、MATLAB の標準の演算子および関数と継承メソッドを、このクラスのオブジェクト用に特殊化したものです。
string | string としてのプロバイダー情報 |
show | プロバイダー情報を表示します |
保護されたメソッド
complete | StringProvider の HTTP ヘッダーの完了 |
preferredBufferSize | ContentProvider の推奨されるバッファー サイズ |
expectedContentLength | ContentProvider の内容の長さ |
start | StringProvider からデータを開始 |
restartable | ImageProvider が再起動可能かどうか |
reusable | ImageProvider が再利用可能かどうか |
delegateTo | 別のプロバイダーにデリゲートする |
例
StringProvider
の使用
次のコードは、Content-Type "text/plain"
を使用した文字列 "myText"
を Shift_JIS エンコードを使用したサーバーに送信するメッセージを準備します。
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
コンストラクターに指定する charset は、Content-Type フィールドの charset と異なります。StringProvider
は文字セットを既に指定している既存の Content-Type フィールドを変更しないため、サーバーはデータが Shift-JIS ではなく US-ASCII であると想定します。
ctf = ContentTypeField(MediaType('text/plain','charset','US-ASCII')); r = RequestMessage('put',ctf,StringProvider('myText','Shift_JIS'));
この例では、"application/json"
の既定の設定は UTF-8 であり Shift_JIS とは異なるため、charset を指定しなかった Content-Type フィールドには MATLAB によって charset パラメーターが追加されます。
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 ヘッダー フィールドがなく、charset が StringProvider
に指定されていない場合、MATLAB はヒューリスティックな方法を使用して、データを表現できる "最小の" エンコードを見つけます。そのうちの 1 つはプラットフォームの既定のエンコードです。この例を Windows で実行すると、string 内の 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 フィールドは charset をもたない "application/json"
を指定し、StringProvider
には何も指定されません。"application/json"
の既定の charset は UTF-8 であるため、StringProvider
はこれを使用して変換し、Content-Type フィールドには明示的に charset を指定しません。
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)