Main Content

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 = StringProviderStringProvider を作成し、Charset プロパティで指定した値でエンコードされた Data プロパティ内のデータを送信します。これらのプロパティは、このプロバイダーが含まれるメッセージを送信する前に設定します。

provider = StringProvider(data,charset)StringProvider を作成し、指定した charset でエンコードされた指定した data を送信します。コンストラクターは Data プロパティを data の値に、Charset プロパティを charset の値に設定します。charset 引数はオプションです。

プロパティ

すべて展開する

パブリック プロパティ

送信するデータ。string または文字ベクトルとして指定します。これは、コンストラクターに指定されたデータの値です。このプロパティは、コンストラクターを呼び出した後またはサブクラス内で直接設定することもできます。

サブクラスの作成ではこのプロパティを新しいデータにいつでも設定できます。getData への次の呼び出しによって、このデータは getData length 引数の値まで変換されます。

属性:

GetAccess
public
SetAccess
public
Dependent
true

エンコードに使われる文字セット。文字ベクトルとして指定します。

属性:

GetAccess
public
SetAccess
public
Dependent
true

メッセージまたはパートのヘッダー フィールド。1 つ以上の matlab.net.http.HeaderField オブジェクトのベクトルとして指定されます。

このプロパティはサブクラスの作成にのみ使用されます。このプロパティは、プロバイダーの complete を呼び出す前に MATLAB で設定されます。マルチパート メッセージ以外については、このプロパティは、MATLAB によって matlab.net.http.field.GenericFields や値が空のフィールドを除いた Request.Header の内容に初期化されます。ContentProvider では、送信するデータを示すヘッダー フィールドを追加したり、メッセージの既存のヘッダー フィールドにパラメーターを追加したりする場合にこのプロパティを使用します。MultipartProvider のデリゲートでは、このプロパティは、MATLAB によってデリゲート元のプロバイダーが挿入するパート用のヘッダー フィールドに初期化されます。これらのフィールドはデリゲートで変更が可能です。

マルチパート メッセージ以外では、プロバイダーの complete メソッドから戻ると、MATLAB はこのプロパティを読み取って、その内容を Request のヘッダーにマージします。この Header に含まれるフィールドの NamesRequest.Header にない場合、Request.Header の末尾に追加されます。この Header に含まれるフィールドの NameRequest.Header に含まれるフィールドと同じで、どちらの Values も空でない場合は、次のように処理されます。

  • Request.Header のフィールドが GenericField の場合、Header のフィールドは無視されます。

  • Request.Header のフィールドが GenericField でない場合、Header のフィールドに置き換えられます。

これらの一方または両方の Value が空の場合は、Request.Header からフィールドが削除され、メッセージの正常な終了時にも追加されません。

MultipartProvider のデリゲートの場合は、この Header の内容全体がパートのヘッダーとして使用されます。マルチパート デリゲートでは、Request.Header にその Header に付随する任意のフィールドが含まれていると想定してはなりません。プロバイダーがマルチパート デリゲートであるかどうかは MyDelegatorMultipartProvider かどうかを確認すれば特定できますが、このテストが必要になることはほとんどありません。

このプロパティが MATLAB で読み取られるのは、プロバイダーの complete メソッドの呼び出しから戻るときだけです。MATLAB で start が呼び出された後は、この配列に対する変更は無視されます。

クラスを作成するときは、スーパークラスで complete を呼び出す前に、この (complete メソッド内の) Headerにサブクラスがフィールドを追加済みの場合があることを認識しておく必要があります。それらのフィールドは残しておいて、同じ名前のフィールドを追加しないようにすることを推奨します。ただし、フィールドへのパラメーターの追加は可能です。たとえば、既存の Content-Type フィールドに charset パラメーターがない場合、スーパークラスで追加できます。

属性:

GetAccess
public
SetAccess
public

チャンク転送コーディングを強制するかどうかを示します。boolean として指定されます。これはサブクラスの作成にのみ関係するプロパティで、マルチパート デリゲート以外のプロバイダーにのみ該当します。サブクラスでは、ForceChunked を設定することで、内容の送信にチャンク転送コーディングを使用するかどうかを制御します。false (既定) の場合、MATLAB は、メッセージの送信準備ができた時点で内容の長さがわかっているかどうかに基づいて、内容をチャンク化して送信するかどうかを決定します。

  • MATLAB で内容の長さがわかっている場合 (メッセージに Content-Length フィールドがあるか、このプロバイダーの expectedContentLength メソッドから数値が返された場合)、チャンク化して送信するかどうかを MATLAB で決定します。

  • MATLAB で内容の長さがわからない場合 (ヘッダーに Content-Length フィールドがないか、expectedContentLength の戻り値が空の場合)、MATLAB はメッセージを常にチャンク化して送信します。

ForceChunkedtrue の場合、内容の長さがわかっているかどうかに関係なく、既知の長さがチャンク サイズに満たない場合を除き、MATLAB はメッセージをチャンク化して送信します。このプロパティが true の場合は、メッセージに Content-Length フィールドを含めてはなりません。HTTP ではチャンクされたメッセージに Content-Length フィールドを含めることが許可されないためです。ただし、想定されるデータの長さを返しているかを MATLAB で検証する場合は、expectedContentLength メソッドで非ゼロの値を返すことができます。

MATLAB でメッセージをチャンク化して送信する場合、各チャンクのサイズは getData で返されたデータの長さと等しくなります。

MATLAB は、complete メソッドを呼び出してから start を呼び出すまでの間にこの値を読み取ります。このフィールドの設定は行いません。

属性:

GetAccess
public
SetAccess
public

送信する要求メッセージ。matlab.net.http.RequestMessage オブジェクトとして指定されます。

このプロパティはサブクラスの作成にのみ使用されます。このプロパティは、このプロバイダーで他のメソッドを呼び出す前であり、かつヘッダー フィールドを追加したりメッセージを検証したりする前に、このプロバイダーが Body に配置された RequestMessageRequestMessage.send メソッドと RequestMessage.complete メソッドで設定されます。プロバイダーは、このメッセージを調べて元の要求の内容を確認できます。

デリゲートの場合、このプロパティの値はデリゲーターと同じになります。ContentProviders がデリゲートである場合は、必ずしも要求メッセージの本文全体を提供するわけではないため、この Request のヘッダー フィールドがそのプロバイダーで提供するデータに関連するものであるとは限らないことに注意が必要です。通常、デリゲートでは、この要求のデータ関連のヘッダー フィールド (Content-Type など) は無視します。

このメッセージへのヘッダー フィールドの追加や既存のヘッダー フィールドの変更をプロバイダーで行う場合は、complete メソッドで Header プロパティにそれらのフィールドを追加します。それらのフィールドに対する処理は、complete の呼び出し元 (RequestMessage またはデリゲート元のプロバイダー) で決定されます。RequestMessage.sendRequestMessage.complete は、それらのフィールドを RequestMessageHeader に常にコピーします。デリゲート元のプロバイダーでは、フィールドをそれぞれの Header プロパティにコピーしたりメッセージに挿入したりできます (MultipartProvider の場合と同様)。詳細については、Header プロパティを参照してください。

このプロパティは読み取り専用です。

属性:

GetAccesspublic
SetAccessmatlab.net.http.RequestMessage

保護プロパティ

このプロバイダーのデリゲート先の ContentProvidermatlab.net.http.io.ContentProvider オブジェクトとして指定されます。このプロパティは、現在のデリゲート先のプロバイダーを示すために呼び出し元のプロバイダー (デリゲーター) の delegateTo メソッドで設定されます。現在のデリゲーションがない場合、値は空です。

このプロパティは complete メソッドで空に設定されます。

属性:

GetAccess
protected
SetAccess
protected

このプロバイダーのデリゲート元の ContentProvidermatlab.net.http.io.ContentProvider オブジェクトとして指定されます。

このプロパティは、ContentProvider から別のプロバイダーにメッセージのすべてまたは一部のデータの送信がデリゲートされている場合に、デリゲート元のプロバイダーを示します。たとえば、MultipartProvider はメッセージのパートを他のプロバイダーにデリゲートするため、各デリゲートに自身のハンドルを挿入します。それ以外の場合、MyDelegator は空です。このプロパティは、デリゲートの delegateTo メソッドで設定されます。

属性:

GetAccess
protected
SetAccess
protected

メソッド

すべて展開する

すべて折りたたむ

次のコードは、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 で導入