4D v16.3

HTTP Request

ホーム

 
4D v16.3
HTTP Request

HTTP Request 


 

HTTP Request ( httpMethod ; url ; contents ; response {; headerNames ; headerValues}{; *} ) -> 戻り値 
引数   説明
httpMethod  テキスト in リクエストで使用するHTTPメソッド
url  テキスト in リクエストの送信先URL
contents  テキスト, BLOB, ピクチャー, Object in リクエストボディの内容
response  テキスト, BLOB, ピクチャー, Object in レスポンスの内容
headerNames  テキスト配列 in リクエストのヘッダー名
in 返されたヘッダー名
headerValues  テキスト配列 in リクエストのヘッダー値
in 返されたヘッダー値
演算子 in 指定時: 接続を保持する (keep-alive)
省略時: 自動で接続を閉じる
戻り値  倍長整数 in HTTPステータスコード

説明   

HTTP Requestコマンドは指定したURLに任意のメソッドでHTTPリクエストを送信し、HTTPサーバーのレスポンスを処理することを可能にします。

httpMethod 引数にはHTTPリクエストのメソッドを渡します。HTTP Clientテーマの以下の定数を使用できます:

定数 コメント
HTTP DELETE method 文字列 DELETE RFC 2616参照
HTTP GET method 文字列 GET RFC 2616参照。HTTP Getを使用するのと同等。
HTTP HEAD method 文字列 HEAD RFC 2616参照
HTTP OPTIONS method 文字列 OPTIONS
HTTP POST method 文字列 POST RFC 2616参照
HTTP PUT method 文字列 PUT RFC 2616参照
HTTP TRACE method 文字列 TRACE RFC 2616参照

リクエストの送信先を url 引数に渡します。使用されるシンタックスは以下の通りです:

http://[{user}:[{password}]@]host[:{port}][/{path}][?{queryString}]

例えば以下の文字列を渡すことができます:

    http://www.myserver.com
    http://www.myserver.com/path
    http://www.myserver.com/path?name=jones
    https://www.myserver.com/login (*)
    http://123.45.67.89:8083
    http://john:smith@123.45.67.89:8083

(*) HTTPSリクエストを行う場合でも、証明書の発行局は検証されません。

contents 引数にはリクエストのボディを渡します。この引数に渡されるデータはリクエストのHTTPメソッドにより異なります。
テキストやBLOB、ピクチャー、オブジェクトデータを送信できます。content-type が指定されない場合、以下のタイプが使用されます:

  • テキスト: text/plain - UTF8
  • BLOB: application/byte-stream 
  • ピクチャー: 既知のMIMEタイプ (best for Web).
  • C_OBJECT オブジェクト: application/json

コマンド実行後、response 引数はサーバーから返された結果を受け取ります。この結果はレスポンスからヘッダーを取り除いたボディー部になります。
responseには異なる型のレスポンスを渡せます:

  • テキスト: 期待される結果がテキストの場合(以下参照)。
  • BLOB: 期待される結果がバイナリの場合。
  • ピクチャー: 期待される結果がピクチャーの場合。
  • C_OBJECT オブジェクト: 期待される結果がオブジェクトの場合。

注: response 引数にテキスト変数が渡された場合、4Dはサーバーから返されたデータを解読しようとします。4Dはまずcontent-type ヘッダーから文字セットを取得しようとし、次にBOMの中身を使用し、最後はhttp-equiv charset (html コンテンツ内) あるいは encoding (xml用) 属性を探します。それでも文字セットが見つからない場合、4DはレスポンスをANSIで解読しようとします。変換が失敗した場合、返されるテキストは空になります。サーバーが文字セット情報あるいはBOMを返すかどうかが分からない一方エンコーディング情報を知っている場合には、BLOBにresponse変数を渡してConvert to textを呼び出す方が正確です。

C_OBJECT 型の変数を <span class="rte4d_prm">response</span> 引数に渡したとき、リクエストが "application/json" (または "<em>something</em>/json") コンテンツ型と結果を返してきた場合、4D はオブジェクトを生成するためにJSON コンテンツを解析しようとします。

サーバーから返された結果がresponseの変数型に対応しない場合、変数は空のままでOKシステム変数に0が設定されます。

headerNamesheaderValuesにはリクエストヘッダーの名前と値をそれぞれ格納した配列を渡します。
このコマンド実行後、これらの配列にはHTTPサーバーから返されたレスポンスのヘッダー情報で置き換えられます。これにより特にCookieを管理できます。

* 引数を使用してサーバー接続時にkeep-aliveメカニズムを有効にできます。デフォルトではこの引数が省略されると、keep-aliveは有効になりません。

コマンドからは標準のHTTPステータスコードが返されます (200=OK等)。HTTPステータスコードについてはRFC 2616を参照してください。
ネットワークに関連する理由 (DNS解決に失敗した、サーバーに接続できないなど...) により、サーバーに接続できない場合、コマンドは0を返し、エラーが生成されます。エラーは ON ERR CALL コマンドを使用してインストールされたエラー処理メソッドで処理できます。

リモートデータベースからレコード削除を要求する:

 $body_t:="{record_id:25}"
 $httpStatus_l:=HTTP Request(HTTP DELETE method;"database.example.com";$body_t)

注: サーバー側では受け付けたリクエストに応じて適切な処理を実装しなければなりません。HTTP Requestはリクエストの送信と返される結果を処理するだけです。

リモートデータベースにレコード追加を要求する:

 $body_t:="{fName:'john',fName:'Doe'}"
 $httpStatus_l:=HTTP Request(HTTP PUT method;"database.example.com";$body_t)

注: サーバー側では受け付けたリクエストに応じて適切な処理を実装しなければなりません。HTTP Requestはリクエストの送信と返される結果を処理するだけです。

リモートデータベースにJSON形式のレコードを追加するリクエスト:

 C_OBJECT($content)
 OB SET($content;"lastname";"Doe";"firstname";"John")
 $result:=HTTP Request(HTTP PUT method;"database.example.com";$content;$response)



参照 

HTTP Get

 
プロパティ 

プロダクト: 4D
テーマ: HTTPクライアント
番号: 1158

This command can be run in preemptive processes

 
履歴 

初出: 4D v13
変更: 4D v14

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)