メインコンテンツまでスキップ
バージョン: 開発中

HTTP Request

HTTP Request ( httpMethod ; url ; contents ; response {; headerNames ; headerValues}{; *} ) -> 戻り値

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

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

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

定数コメント
HTTP DELETE method文字列DELETERFC 2616参照
HTTP GET method文字列GETRFC 2616参照。HTTP Getを使用するのと同等。
HTTP HEAD method文字列HEADRFC 2616参照
HTTP OPTIONS method文字列OPTIONS
HTTP POST method文字列POSTRFC 2616参照
HTTP PUT method文字列PUTRFC 2616参照
HTTP TRACE method文字列TRACERFC 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    http://[2001:0db8:0000:0000:0000:ff00:0042:8329]    http://[2001:0db8:0000:0000:0000:ff00:0042:8329]:8080/index.html (**)

(*) HTTPSリクエストを行う場合でも、証明書の発行局は検証されません。
(**) IPv6 アドレスをURLに使用する場合についての詳細は RFC 2732 を参照ください。

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

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

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

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

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

オブジェクト型の変数を response 引数に渡したとき、リクエストが テキストコンテンツ型と結果を返してきた場合、4D はコンテンツをJSONとして解析しようとし、解析された結果をオブジェクトとして返します。そうでない場合4D.Blob オブジェクトが返されます。

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

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

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

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

例題 1

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

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

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

例題 2

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

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

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

例題 3

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

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

参照

HTTP Get