説明
HTTP リクエストを生成し、サーバーからのレスポンスを処理します。
カテゴリ
シンタックス
注意:このタグの属性は attributeCollection 属性で指定でき、その値は構造体になります。attributeCollection 属性で構造体の名前を指定し、タグの属性名を構造体のキーとして使用します。 |
関連項目
cfhttpparam、GetHttpRequestData、cfftp、cfldap、cfmail、cfpop
履歴
ColdFusion 11 更新プログラム 5:エンコーディング中に -_.! ~*'() の文字を無視するサポートを追加しました。
ColdFusion 11 更新プログラム 3:PATCH メソッドのサポートを追加しました。
ColdFusion :NTLM 認証のサポートを追加しました。3 つの属性(authType、domain、workstation)が追加されました。また、このタグは、ColdFusion が Oracle 1.7 以降の JVM 上で実行されている場合にのみ、SNI(サーバー名表示)をサポートします。
ColdFusion 8:clientCert 属性と clientCertPassword 属性を追加しました。
ColdFusion MX 7.01:getAsBinary 属性の値として "never" が追加されました。
ColdFusion MX 7: result 属性が追加されました。
ColdFusion MX 6.1:
- HEAD、PUT、DELETE、OPTIONS、および TRACE の各メソッドのサポートが追加されました。
- multipart、getAsBinary、proxyUser、および proxyPassword の各属性が追加されました。
- Changed httpparam の動作を変更: すべての操作には、 httpparam タグで処理するページのみに適用されます。
- cfhttp.errorDetail という戻り変数を追加しました。
- レスポンスの本文コンテンツのタイプがテキストと見なされるように変更されました。
- 複数ヘッダーの動作が変更されました。同じタイプの複数ヘッダーは配列で返されるようになりました。
- HTTPS プロキシトンネリングのサポートが追加されました。
- コードとマニュアルのバグが修正されました。
ColdFusion MX:
- 文字セットと firstrowasheaders 属性を追加しました
- SSL (Secure Sockets Layer) のサポートが変更されました。ColdFusion は Sun JSSE ライブラリを使用します。このライブラリは、SSL をサポートするために 128 ビット暗号化をサポートします。
属性
次に示す属性は HTTP トランザクションを制御するためのもので、どの HTTP メソッドでも使用できます。
属性 |
必須/オプション |
デフォルト |
説明 |
---|---|---|---|
url |
必須 |
http プロトコルを使用 |
リクエストを処理するサーバー上のリソースのアドレスです。この URL にはホスト名か IP アドレスを含める必要があります。 )を指定しなかった場合は、デフォルトのプロトコルである http が使用されます。 |
charset |
オプション |
リクエスト:UTF-8 応答 :Content-type ヘッダーによって指定された文字セット( response で charset を指定していない場合は UTF-8)。 |
URL クエリ文字列、フォームまたはファイルデータ、レスポンスなどのリクエストの文字エンコードです。一般的に使用される値を次に示します。
|
clientCert |
オプション |
|
リクエストのためのクライアント証明書が含まれている PKCS12 形式のファイルへの絶対パスです。 |
clientCertPassword |
オプション |
|
クライアント証明書を復号するために使用されるパスワードです。 |
compression |
オプション |
|
ターゲット Web サーバーの圧縮ステータスです。サポートされている値は none のみです。ターゲットの Web サイトが、HTTP 圧縮が有効な IIS で実行されている場合は、この属性を使用して、GET または POST オペレーションを実行するときの接続エラーを回避できます。 |
getAsBinary |
オプション |
× |
|
method |
オプション |
GET |
|
password |
オプション |
|
基本認証のターゲット URL にパスワードを渡すために使用します。 username を組み合わせて base64 エンコードされた文字列を 作成し、 Authenticate ヘッダーで渡します。統合 Windows 認証または Kerebos 認証には対応しません。 |
port |
オプション |
80 ( http の場合)、443(https の場合) |
リクエストの送信先となるサーバー上のポート番号です。この値よりも url 属性の port 値が優先されます。 |
proxyServer |
オプション |
|
リクエストの送信先となるプロキシサーバーのホスト名または IP アドレスです。 |
proxyPort |
オプション |
80 |
プロキシサーバー上で使用するポート番号です。 |
proxyUser |
オプション |
|
プロキシサーバーに提供するユーザー名 です。 |
proxyPassword |
オプション |
|
プロキシサーバーに提供するパスワードです。 |
redirect |
オプション |
yes |
レスポンスヘッダに Location フィールドが含まれ、ColdFusion が 300 系列 (リダイレクション) のステータスコードを受け取った場合、そのフィールド内で指定された URL に実行をリダイレクトするかどうかを指定します。
|
resolveURL |
オプション |
× |
|
result |
オプション |
|
結果を受け取る代替変数を指定することができます。 |
throwOnError |
オプション |
no |
|
timeout |
オプション |
|
リクエストの最大待機時間を秒数で指定します。レスポンスがないままタイムアウトになった場合は、そのリクエストが失敗したものと見なされます。クライアントが URL 検索パラメータ内でタイムアウトを指定した場合は (例 : ?RequestTime=120)、その URL タイムアウトと timeout 属性値のうち、短いほうが採用されます。これにより、リクエストが確実にページよりも先に (あるいは同時に) タイムアウトになります。 |
userAgent |
オプション |
ColdFusion |
ユーザーエージェントリクエストヘッダに配置されるテキストです。リクエストクライアントソフトウェアを識別するために使われます。ColdFusion アプリケーションをブラウザのように見せることができます。 |
username |
オプション |
|
これを使用して ユーザー名 を基本認証のターゲット URL に渡します。これを password と組み合わせ、認証ヘッダー で 渡された base64 形式でエンコードされた文字列を作成します。統合 Windows 認証または Kerberos 認証には対応しません。 |
authType | オプション | BASIC | サポートされる値は次のとおりです。
メモ: |
domain | オプション | 認証に使用するドメイン名です(NTLM ベースの認証に使用)。 | |
workstation | オプション | 認証に使用するワークステーション名です(NTLM ベースの認証に使用)。 | |
オプション | |||
オプション |
PUT メソッドでは、次の属性を使用して、 httpparam type="formField" で指定されたデータの送信方法を設定します。
属性 |
必須/オプション |
デフォルト |
説明 |
---|---|---|---|
multipart |
オプション |
no(ファイルタイプデータが request に含まれる場合にのみマルチパートとして送信) |
ColdFusion に対し、 cfhttpparam type = "formField" タグで指定されたすべてのデータをマルチパート/フォームデータのコンテンツタイプを使用したマルチパート/フォームデータのコンテンツタイプを使用して、として使用できます。デフォルトでは、ColdFusion によって送信されるのは、 cfhttp リクエストに、 コンテンツタイプ 「application/x-www-form- urlencoded 」を使用した formField のみを含むもののみです。ただし、リクエストに File タイプデータも含まれている場合は、すべての部分に multipart/form-data コンテンツタイプが使用されます。この属性を yes に設定した場合は、Content-Type の記述の中でリクエストの文字セットも送信されます。すべてのフォームフィールドデータをこの文字エンコードでエンコードする必要があります。ColdFusion はこのデータに URLEncode を実行しません。フィールド名は ISO-88591-1 または ASCII である必要があります。一部の http パーサ(以前のバージョンの ColdFusion で使われていたものも含む)は、マルチパートフォームフィールドの文字エンコードの説明を無視します。 |
次の属性はマルチパートヘッダフィールドを設定し、YouTube にビデオをアップロードする場合などに使用されます。
属性 |
必須/オプション |
デフォルト |
説明 |
---|---|---|---|
multipartType |
オプション |
form-data |
マルチパートヘッダフィールドを related または form-data に設定できます。デフォルトでは、値は form-data です。 |
例
<! ---ビデオを取得---> <cfset videoName = "<video path>\hello.wmv"> <cfset videoFileName = "hello.wmv"> <cfoutput> <! ---ユーザーアカウントデータを設定---> <cfset clientKey = "client key from google"/> <cfset devKey = "<dev key from google>"/> <cfset youTubeUploadURL = "http://uploads.gdata.youtube.com/feeds/api/users/default/uploads"/> <! ---Google / YouTube で認証---> <cfhttp url="https://www.google.com/accounts/ClientLogin" method="post" result="result" charset="utf-8"> <cfhttpparam type="formfield" name="accountType" value="HOSTED_OR_GOOGLE"> <cfhttpparam type="formfield" name="Email" value="<gmail id>"> <cfhttpparam type="formfield" name="Passwd" value="<password>"> <cfhttpparam type="formfield" name="service" value="youtube"> <cfhttpparam type="formfield" name="source" value="youtubecode"> </cfhttp> <! ---認証トークンを作成---> <cfset content = result.filecontent> <cfset authdata = structNew()> <cfloop index="line" list="#content#" delimiters="#chr(10)#"> <cfset dtype = listFirst(line, "=")> <cfset value = listRest(line, "=")> <cfset authdata[dtype] = value></cfloop> <! --- ATOM XML を作成してビデオとともに送信するファイルを保存---> <cfsavecontent variable="meta"><cfoutput> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007"> <media:group> <media:title type="plain">WithOutQuotes</media:title> <media:description type="plain">Test Description</media:description> <media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People </media:category> <media:keywords>yourvideo</media:keywords> </media:group> </entry> </cfoutput> </cfsavecontent> <cfset tmpfile = expandPath("./meta.xml")/> <cffile action="write" file="#tmpfile#" output="#trim(meta)#" /> <! ---ビデオをアップロード---> <cfhttp url="#youTubeUploadURL#" result="result" method="POST" timeout="450" multipartType="related"> <cfhttpparam type="header" name="Authorization" value="GoogleLogin auth=#authdata.auth#"> <cfhttpparam type="header" name="X-GData-Client" value="#variables.clientkey#"> <cfhttpparam type="header" name="X-GData-Key" value="key=#variables.devkey#"> <cfhttpparam type="header" name="Slug" value="#videoFileName#"> <! ---<CFHTTPPARAM type="HEADER" name="Connection" value="Keep-Alive"> ---> <! ---2 つのファイルを送信---> <cfhttpparam type="file" name="API_XML_Request" file="#tmpfile#" mimetype="application/atom+xml"> <cfhttpparam type="file" name="file" file="#videoName#" mimetype="video/*"> </cfhttp> <cfdump var="#result#"/> </cfoutput>
次の属性を使用すると、必要なオペレーションの結果を返すために使用する変数の名前を指定することができます。指定した名前が、戻り値にアクセスする際の接頭辞として cfhttp と置き換わります。例えば、result 属性を myResult に設定した場合は、#myResult.FileContent# として FileContent にアクセスします。
result 属性では、複数のページから同時に呼び出される関数または CFC について、一方の呼び出しの結果が他方の呼び出しの結果を上書きしないようにすることができます。cfhttp get オペレーションで返される変数の詳細については、「使用方法」セクションのcfhttp の get オペレーションで返される変数を参照してください。
属性 |
必須/オプション |
デフォルト |
説明 |
---|---|---|---|
result |
オプション |
|
結果を返すために使用する変数の名前を指定します。 |
次の属性は、HTTP レスポンス本文をファイルに保管するときに使用します。GET、POST、PUT、DELETE、OPTIONS、TRACE の各メソッドでレスポンス本文をファイルに保管することができますが、DELETE メソッドと OPTIONS メソッドではほとんど役に立ちません。
属性 |
必須/オプション |
デフォルト |
説明 |
---|---|---|---|
ファイル |
path 属性を指定していて、GET メソッドでない場合は必須 |
「説明」を参照 |
レスポンス本文の保管先となるファイルの名前です。GET オペレーションでは、URL 内でリクエストされたファイルがデフォルトになります(ファイルが指定されている場合)。例えば、GET メソッドの URL が http:www.myco.com/test.htm である場合、デフォルトファイルは test.htm です。この属性ではディレクトリへのパスを指定しないでください。パスは path 属性で指定します。 |
path |
file 属性を指定している場合は必須 |
|
HTTP レスポンス本文をファイルに保管することを ColdFusion に指示します。ファイルの保管先となるディレクトリへの絶対パスを指定します。 |
ファイルのメモリ内のディレクトリを指定するには、path 属性で次のシンタックスを使用します。メモリ内のファイルを使用すると、一時的データの処理が速くなります。
ram:///filepath |
ファイルパスには、複数のディレクトリを含めることができます (例 : ram:///petStore/images.パスに含まれるディレクトリを事前に作成しておく必要があります。メモリ内ファイルの使用方法について詳しくは、『ColdFusion アプリケーションの開発』の「ColdFusion アプリケーションの最適化」の「メモリ内ファイルの使用」を参照してください。
次の属性は、HTTP レスポンス本文を ColdFusion クエリオブジェクトに変換するときに使用します。これらの属性は GET メソッドと POST メソッドでのみ使用できます。
属性 |
必須/オプション |
デフォルト |
説明 |
---|---|---|---|
列[れつ] |
オプション |
レスポンスの 1 行目には列名が含まれます。 |
このクエリの列名をカンマで区切って指定します。スペースは使用しません。列名は文字で始める必要があります。2 文字目以降には、文字、数字、アンダースコア文字 (_) を使用できます。 |
delimiter |
オプション |
, (カンマ) |
クエリ列を区切る文字です。レスポンス本文はこの文字を使用してクエリ列を区切る必要があります。 |
firstrowasheaders |
オプション |
yes |
ColdFusion で、クエリのレコードセットの最初の行を処理する方法を決定します。
|
name |
オプション |
|
返された HTTP レスポンス本文から指定の名前のクエリオブジェクトを作成するよう ColdFusion に指示します。 |
textQualifier |
オプション |
" 二重引用符 |
テキスト列の始まりと終わりを示すオプションの文字です。レスポンス本文中のテキストフィールドがフィールド値の一部に区切り文字を含んでいる場合は、テキストフィールドをこの文字で囲む必要があります。 |
使用方法
cfhttp タグは、HTTP リクエストを作成し、返された結果を処理するための汎用ツールです。このタグを使用すると、ほとんどの標準 HTTP リクエストタイプを生成することができます。リクエストヘッダーと本文コンテンツを指定するには、このタグ内で cfhttpparam タグを使用します。
ColdFusion は、cfhttp リクエストに対するレスポンスを受け取ると、そのレスポンス本文をファイルまたは cfhttp.FileContent 文字列変数に保管することができます。本文テキストが結果セットとして構築されている場合は、その本文テキストをクエリオブジェクトに入れることができます。さらに、返されたすべてのヘッダ値へのアクセス、エラーステータスとリダイレクションの処理方法の指定、リクエストをハングさせないためのタイムアウトの指定もできます。
HTTP プロトコルは World Wide Web のバックボーンであり、すべての web トランザクションで使用されます。cfhttp タグはほとんどのリクエストタイプを生成できるので、非常に柔軟に使用することができます。例えば次のような使い方があります。
- Web サービスとしては使用できないダイナミックな web サイトやサービスとやり取りする(SOAP web サービスへのアクセスには cfinvoke タグを使用)
- Web サーバー上のイメージなど、HTML ページやその他のファイルのコンテンツを取得し、それを CFML ページ内で使用したり、ファイルに保管したりする
- url 属性に https プロトコルを指定して、サーバーに安全なリクエストを送信する
- POST メソッドを使用して、multipart/form-data スタイルのデータを、そのようなデータを処理して結果を返すことのできる任意の URL (CGI 実行可能ファイルや、その他の ColdFusion ページなど) に送信する
- PUT メソッドを使用して、FTP リクエストを受け付けないサーバーにファイルをアップロードする
このタグの本文には、cfhttpparam タグを含めることができます。また、PUT リクエストと POST リクエストの場合はこのタグは必須です。このタグに cfhttpparam タグを含める場合は、</cfhttp> 終了タグが必要です。
cfhttp タグを含む HTTPS を使用するためには、各 Web サーバーに対する証明書を、ColdFusion が使用する JRE のキーストアに手動でインポートすることが必要になる場合があります。JSSE (Java Secure Sockets Extension) が認識する機関 (Verisign など) によって証明書が署名 (発行) される場合、つまり、署名する機関が既に cacerts にある場合、この手順は必要ありません。ただし、SSL (Secure Sockets Layer) 証明書を自己発行している場合は、この手順が必要になることがあります。
証明書を手動でインポートするには :
- SSL サーバー上の当該ページに進みます。
- 鍵のアイコンをダブルクリックします。
- 「詳細」タブをクリックします。
- 「ファイルにコピー」をクリックします。
- base64 オプションを選択してファイルを保存します。
- CER ファイルを C:¥ColdFusion9¥runtime¥jre¥lib¥security (または JRE ColdFusion が使用する任意の場所) にコピーします。
同じディレクトリの次のコマンドを実行します (keytool.exe は C:¥ColdFusion9¥runtime¥jre¥bin にあります)。
keytool -import -keystore cacerts -alias giveUniqueName -file filename.cer
cfhttp の get オペレーションで返される変数
cfhttp タグは、次の変数を返します。result 属性を設定した場合は、割り当てた名前が接頭辞として cfhttp と置き換わります。その他の情報については、result 属性を参照してください。
名前 |
説明 |
---|---|
cfhttp.charSet |
レスポンスの Content-Type ヘッダで指定されたレスポンス文字セット (文字エンコード) です。 |
cfhttp.errorDetail |
HTTP サーバーへの接続が失敗した場合に、失敗の詳細を記録します(例 : "Unknown host: my.co.com")。それ以外の場合は、空の文字列になります。エラー状態について、他の変数を確認する前にこの変数を確認することをお勧めします。 |
cfhttp.fileContent |
レスポンス本文です。例えば、GET オペレーションによって取得された HTML ページのコンテンツなどです。レスポンスをファイルに保管した場合は空になります。 |
cfhttp.header |
すべてのヘッダ情報を 1 つの文字列に格納した生のレスポンスヘッダーです。cfhttp.responseHeader 変数と同じ情報を含みます。 |
cfhttp.mimeType |
レスポンスの Content-Type ヘッダで指定されている MIME タイプです (例 : text/html)。 |
cfhttp.responseHeader |
構造体の形式にされたレスポンスヘッダです。要素キーは、Content-Type や Status_Code などのヘッダ名です。あるヘッダータイプのインスタンスが複数ある場合は、そのタイプの値が配列に格納されます。よく使用されるテクニックは、#cfhttp.resonseHeaderfieldVariable# のように、cfhttp.responseHeader 構造体をダイナミック配列としてダイナミックにアクセスすることです。 |
cfhttp.statusCode |
HTTP Explanation ヘッダ値の後に続く HTTP status_code ヘッダ値です (例 : "200 OK")。 |
cfhttp.text |
ブール値。レスポンス本文のコンテンツタイプがテキストである場合は true になります。ColdFusion は、次の場合にレスポンス本文をテキストとして認識します。
|
区切り形式のテキストファイルからクエリを構築する
cfhttp タグでは、レスポンス本文から ColdFusion クエリオブジェクトを作成することができます。これを行うには、レスポンス本文が、数行から成るテキストを含んでいて、その各行が列区切り文字によって区切られたいくつかのフィールドを含んでいる必要があります。デフォルトの区切り文字はカンマ (,) です。レスポンス本文では、テキスト修飾子を使用することもできます。デフォルトのテキスト修飾子は二重引用符 (") です。文字列フィールドをテキスト修飾子で囲むと、そのフィールドに区切り文字を含めることができます。フィールドテキスト内にテキスト修飾子を含める場合は、その文字を重ねて指定してエスケープします。次の例は、クエリに変換される 2 行のリクエスト本文を示しています。各行はカンマで区切られた 3 つのフィールドを含んでいます。
Field1,Field2,Field3 |
ColdFusion がこのデータをどのように処理するかを確認するには、次のコードを実行します。
<cfhttp method="Get" url="127.0.0.1:8500/tests/escapetest.txt" name="onerow"> <cfdump var="#onerow#"><br>
列名は次の 3 通りの方法で指定できます。
- デフォルトでは、レスポンスの 1 行目は列名として使用されます。
- columns 属性にカンマ区切りの値を指定した場合は、その属性で指定した名前が列名として使用されます。レスポンスの 1 行目にデータが含まれている場合は、firstRowAsHeaders="no" を設定します。データが含まれていない場合、1 行目は無視されます。
- columns 属性を指定せず、firstrowasheaders="no" を設定した場合は、Column_1、Column_2、... というように列名が生成されます。
cfhttp タグは、このタグによって返されるデータ内の列名をチェックして、列名が文字で始まっていることと、文字、数字、アンダースコア文字()だけを含んでいることを確認します。ColdFusion は無効な列名をチェックします。列名は文字で始める必要があります。2 文字目以降には、文字、数字、アンダースコア()を使用できます。列名が無効な場合は、エラーが発生します。
注意事項
- ColdFusion Administrator のタイムアウトと URL のタイムアウトを有効にするには、ColdFusion Administrator の「サーバーの設定」ページでタイムアウトを有効にします。詳しくは、ColdFusion の設定と管理を参照してください。
- cfhttp タグはすべてのオペレーションで基本認証をサポートします。
- cfhttp では、SSL を使用してセキュアトランザクション通信が行われます。
- HTTP レスポンス本文をファイルに保管した場合、それは CFHTTP.FileContent 変数には格納されず、クエリオブジェクトも生成されません。レスポンス本文をファイルに保管しなかった場合、それは CFHTTP.FileContent 変数に格納されます。このとき、name 属性を指定していればクエリオブジェクトが生成されます。
- cfhttp タグは、やダイジェスト認証をサポートしません。
- Microsoft IIS を使用している場合、HTTP ヘッダーサイズの制限はありません。HTTP ヘッダーサイズの制限を指定するには、IIS で設定します。
- Cfhttp タグはエンコーディング中に ignores -_.! ~*'() の文字を無視します。このような文字を使用したクエリ文字列を使用して URL が指定されている場合、これらの文字は符号化されません。この機能を使用することで、受信側の URL に問題が発生するのを防ぐのに役立ちます。
例
<cfhttp result="result" method="GET" charset="utf-8" url="https://www.adobe.com/"> <cfhttpparam name="q" type="formfield" value="cfml"> </cfhttp> <cfdump var="#result#">