Description
Generates an HTTP request and handles the response from the server.
Category
Syntax
Note: You can specify this tag's attributes in an attributeCollection attribute whose value is a structure. Specify the structure name in the attributeCollection attribute and use the tag's attribute names as structure keys. |
See also
cfhttpparam, GetHttpRequestData, cfftp, cfldap, cfmail, cfpop
History
ColdFusion 11 Update 5: Added support to ignore -_.!~*'() characters while encoding.
ColdFusion 11 Update 3: Added support for PATCH method.
ColdFusion 11: Added support for NTLM authentication. Three attributes added - authType, domain, and workstation. Also, this tag supports SNI (server name indication) only if ColdFusion is running on an Oracle 1.7+ JVM.
ColdFusion 8: Added the clientCert and clientCertPassword attributes.
ColdFusion MX 7.01: Added the "never" value of the getAsBinary attribute.
ColdFusion MX 7: Added the result attribute.
ColdFusion MX 6.1:
- Added support for the following methods: HEAD, PUT, DELETE, OPTIONS, TRACE.
- Added multipart, getAsBinary, proxyUser, and proxyPassword attributes.
- Changed httpparam behavior: all operations can have httpparam tags.
- Added the cfhttp.errorDetail return variable.
- Modified response body content types considered to be text.
- Changed behavior for multiple headers: multiple headers of the same type are returned in an array.
- Added support for HTTPS proxy tunneling.
- Fixed bugs in code and documentation.
ColdFusion MX:
- Added the charset and firstrowasheaders attributes.
- Changed Secure Sockets Layer (SSL) support: ColdFusion uses the Sun JSSE library, which supports 128-bit encryption, to support SSL.
Attributes
The following attributes control the HTTP transaction and can be used for all HTTP methods:
Attribute |
Req/Opt |
Default |
Description |
---|---|---|---|
url |
Required |
Uses the http protocol |
Address of the resource on the server that handles the request. The URL must include the hostname or IP address. ), ColdFusion uses the default protocol, http . |
charset |
Optional |
For request: UTF-8 For response : charset specified by response Content-Type header, or UTF-8 if response does not specify charset . |
The character encoding of the request, including the URL query string and form or file data, and the response. The following list includes commonly used values:
|
clientCert |
Optional |
|
The full path to a PKCS12 format file that contains the client certificate for the request. |
clientCertPassword |
Optional |
|
Password used to decrypt the client certificate. |
compression |
Optional |
|
The target webserver's compression status. The only supported value is none. If the target website runs on IIS with HTTP compression enabled, use this attribute to avoid a connection failure while performing GET or POST operations. |
getAsBinary |
Optional |
no |
|
method |
Optional |
GET |
|
password |
Optional |
|
Use to pass a password to the target URL for Basic Authentication. Combined with username to form a base64 encoded string that is passed in the Authenticate header. Does not provide support for Integrated Windows or Kerebos authentication. |
port |
Optional |
80 for http or 443 for https |
Port number on the server to which to send the request. A port value in the url attribute overrides this value. |
proxyServer |
Optional |
|
Host name or IP address of a proxy server to which to send the request. |
proxyPort |
Optional |
80 |
Port number to use on the proxy server. |
proxyUser |
Optional |
|
User name to provide to the proxy server. |
proxyPassword |
Optional |
|
Password to provide to the proxy server. |
redirect |
Optional |
yes |
If the response header includes a Location field AND ColdFusion receives a 300-series (redirection) status code, specifies whether to redirect execution to the URL specified in the field:
|
resolveURL |
Optional |
no |
|
result |
Optional |
|
Lets you specify an alternate variable in which to receive a result. |
throwOnError |
Optional |
no |
|
timeout |
Optional |
|
Value, in seconds, that is the maximum time the request can take. If the time-out passes without a response, ColdFusion considers the request to have failed. If the client specifies a time-out in the URL search parameter (for example, ?RequestTime=120) ColdFusion uses the lesser of the URL time-out and the timeout attribute value; this ensures that the request times out before, or at the same time as, the page. |
userAgent |
Optional |
ColdFusion |
Text to put in the user agent request header. Used to identify the request client software. Can make the ColdFusion application appear to be a browser. |
username |
Optional |
|
Use to pass a user name to the target URL for Basic Authentication. Combined with password to form a base64 encoded string that is passed in the Authenticate header. Does not provide support for Integrated Windows or Kerberos authentication. |
authType | Optional | BASIC | The supported values are:
Note |
domain | Optional | The domain name for authentication. (Use for NTLM-based authentication) | |
workstation | Optional | The workstation name for authentication. (Use for NTLM-based authentication) | |
Optional | |||
Optional |
The following attribute is used with the PUT method to determine how to send data specified with httpparam type="formField":
Attribute |
Req/Opt |
Default |
Description |
---|---|---|---|
multipart |
Optional |
no (Sends as multipart only if request includes File type data.) |
Tells ColdFusion to send all data specified by cfhttpparam type="formField" tags as multipart form data, with a Content-Type of multipart/form-data. By default, ColdFusion sends cfhttp requests that contain only formField data with a Content Type of application/x-www-form- urlencoded . (If the request also includes File type data, ColdFusion uses the multipart/form-data content type for all parts.) If yes, ColdFusion also sends the request's charset in each Content-Type description. All form field data must be encoded in this character encoding, and ColdFusion does not URLEncode the data. (The field name must be in ISO-88591-1 or ASCII.) Some http parsers, including the one used by previous versions of ColdFusion, ignore the multipart form field character encoding description. |
The following attribute sets a multipart header field and is used, for example, for uploading videos on YouTube.
Attribute |
Req/Opt |
Default |
Description |
---|---|---|---|
multipartType |
Optional |
form-data |
Allows you to set the multipart header field to related or form-data. By default, the value is form-data. |
Example
<!--- Get Video ---> <cfset videoName = "<video path>\hello.wmv"> <cfset videoFileName = "hello.wmv"> <cfoutput> <!--- Set User Account Data ---> <cfset clientKey = "client key from google"/> <cfset devKey = "<dev key from google>"/> <cfset youTubeUploadURL = "http://uploads.gdata.youtube.com/feeds/api/users/default/uploads"/> <!--- Authenticate with 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> <!--- Create Auth Token ---> <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> <!--- Create ATOM XML and save to a file to be sent with video ---> <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)#" /> <!--- Upload video ---> <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"> ---> <!--- Send 2 files ---> <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>
The following attribute allows you to specify the name of the variable in which you would like the results of the operation returned. The name you specify replaces cfhttp as the prefix by which you access the returned variables. For example, if you set the result attribute to myResult, you would access FileContent as #myResult.FileContent#.
The result attribute allows functions or CFCs that are called from multiple pages at the same time to avoid overwriting the results of one call with another. For information about the variables returned by a cfhttp get operation, see the section Variables returned by a cfhttp get operation in the Usage section.
Attribute |
Req/Opt |
Default |
Description |
---|---|---|---|
result |
Optional |
|
Specifies the name of the variable in which you want the result returned. |
The following attributes tell ColdFusion to put the HTTP response body in a file. You can put the response body in a file for GET, POST, PUT, DELETE, OPTIONS, and TRACE methods, but it is generally not useful with the DELETE or OPTIONS method.
Attribute |
Req/Opt |
Default |
Description |
---|---|---|---|
file |
Required if path is specified and not a GET method |
See Description |
Name of the file in which to store the response body. For a GET operation, the default is the file requested in the URL, if there is one. For example, if the URL in a GET method is http:www.myco.com/test.htm, the default file is test.htm. Do not specify the path to the directory in this attribute; use the path attribute. |
path |
Required if file is specified. |
|
Tells ColdFusion to save the HTTP response body in a file. Contains the absolute path to the directory in which to store the file. |
Use the following syntax in the path attribute to specify an in-memory directory for your files. In-memory files speed processing of transient data.
ram:///filepath |
The filepath can include multiple directories, for example ram:///petStore/images. Create the directories in the path before you can use them. For more information on using in-memory files, see Working with in-memory files in Optimizing ColdFusion applications in the Developing ColdFusion Applications.
The following attributes tell ColdFusion to convert the HTTP response body into a ColdFusion query object. They can be used with the GET and POST methods only.
Attribute |
Req/Opt |
Default |
Description |
---|---|---|---|
columns |
Optional |
First row of response contains column names. |
The column names for the query, separated by commas, with no spaces. Column names must start with a letter. The remaining characters can be letters, numbers, or underscore characters (_). |
delimiter |
Optional |
, (comma) |
A character that separates query columns. The response body must use this character to separate the query columns. |
firstrowasheaders |
Optional |
yes |
Determines how ColdFusion processes the first row of the query record set:
|
name |
Optional |
|
Tells ColdFusion to create a query object with the given name from the returned HTTP response body. |
textQualifier |
Optional |
" double-quotation mark |
A character that, optionally, specifies the start and end of a text column. This character must surround any text fields in the response body that contain the delimiter character as part of the field value. |
Usage
The cfhttp tag is a general-purpose tool for creating HTTP requests and handling the returned results. It enables you to generate most standard HTTP request types. You use embedded cfhttpparam tags to specify request headers and body content.
When ColdFusion receives a response to a cfhttp request, it can put the response body (if any) in a file or the cfhttp.FileContent string variable. If the body text is structured as a result set, ColdFusion can put the body text in query object. You can also access the values of all returned headers and specify how to handle error status and redirections, and specify a time-out to prevent requests from hanging.
The HTTP protocol is the backbone of the World Wide Web and is used for every web transaction. Because the cfhttp tag can generate most types of requests, it provides significant flexibility. Possible uses include:
- Interacting with dynamic web sites and services that are not available as web services. (Use the cfinvoke tag to access SOAP web services.)
- Getting the contents of an HTML page or other file such as an image on a web server for use in your CFML page or storage in a file.
- Sending a secure request to a server by specifying the https protocol in the url attribute.
- Using the POST method to send a multipart/form-data style post to any URL that can handle such data and return results, including CGI executables or even other ColdFusion pages.
- Using the PUT method to upload files to a server that does not accept FTP requests.
This tag can, and for PUT and POST requests must, have a body that contains cfhttpparam tags. If this tag has cfhttpparam tags, it must have a </cfhttp> end tag.
To use HTTPS with the cfhttp tag, you might need to manually import the certificate for each web server into the keystore for the JRE that ColdFusion uses. This procedure should not be necessary if the certificate is signed (issued) by an authority that the JSSE (Java Secure Sockets Extension) recognizes (for example, Verisign); that is, if the signing authority is in the cacerts already. However, you might need to use the procedure if you are issuing SSL (secure sockets layer) certificates yourself.
Manually import a certificate
- Go to a page on the SSL server in question.
- Double-click the lock icon.
- Click the Details tab.
- Click Copy To File.
- Select the base64 option and save the file.
- Copy the CER file into C:\ColdFusion9\runtime\jre\lib\security (or whichever JRE ColdFusion is using).
Run the following command in the same directory (keytool.exe is located in C:\ColdFusion9\runtime\jre\bin):
keytool -import -keystore cacerts -alias giveUniqueName -file filename.cer
Variables returned by a cfhttp get operation
The cfhttp tag returns the following variables. If you set the result attribute, the name you assign replaces cfhttp as the prefix. For additional information, see the result attribute.
Name |
Description |
---|---|
cfhttp.charSet |
Response character character set (character encoding) specified by the response Content-Type header. |
cfhttp.errorDetail |
If the connection to the HTTP server fails, contains details about the failure. For instance: "Unknown host: my.co.com"; otherwise, the empty string. recommends that you check this variable for an error condition before checking other variables. |
cfhttp.fileContent |
Response body; for example, the contents of an html page retrieved by a GET operation. Empty if you save the response in a file. |
cfhttp.header |
Raw response header containing all header information in a single string. Contains the same information as the cfhttp.responseHeader variable. |
cfhttp.mimeType |
MIME type specified by the response Content-Type header; for example, text/html. |
cfhttp.responseHeader |
The response headers formatted into a structure. Each element key is the header name, such as Content-Type or Status_Code. If there is more than one instance of a header type, the type values are put in an array. One common technique is to dynamically access the cfhttp.responseHeader structure as a dynamic array; for example, #cfhttp.resonseHeaderfieldVariable#. |
cfhttp.statusCode |
The HTTP status_code header value followed by the HTTP Explanation header value; for example, "200 OK". |
cfhttp.text |
Boolean; true if the response body content type is text. ColdFusion recognizes the response body as text in the following situations:
|
Building a query from a delimited text file
The cfhttp tag can create a ColdFusion query object form the response body. To do so, the response body must consist of lines of text, with each line having fields that are delimited by a character that identifies the column breaks. The default delimiter is a comma (,). The response data can also use a text qualifier; the default is a double-quotation mark ("). If you surround a string field in the text qualifier, the field can contain the delimiter character. To include the text qualifier in field text, escape it by using a double character. The following line shows a two-line request body that is converted into a query. It has three comma-delimited fields:
Field1,Field2,Field3 |
Run the following code to show how ColdFusion treats this data:
<cfhttp method="Get" url="127.0.0.1:8500/tests/escapetest.txt" name="onerow"> <cfdump var="#onerow#"><br>
Column names can be specified in three ways:
- By default, ColdFusion uses the first row of the response as the column names.
- If you specify a comma-delimited columns attribute, ColdFusion uses the names specified in the attribute as the column names. Set firstRowAsHeaders="no" if the first row of the response contains data. Otherwise, ColdFusion ignores the first row.
- If you do not specify a columns attribute and set firstrowasheaders="no", ColdFusion generates column names of the form Column_1, Column2, etc.
The cfhttp tag checks to ensure that column names in the data returned by the tag start with a letter and contain only letters, numbers, and underscore characters ().ColdFusion checks for invalid column names. Column names must start with a letter. The remaining characters can be letters, numbers, or underscores (). If a column name is not valid, ColdFusion generates an error.
Notes
- For the ColdFusion Administrator time-out and the URL time-out to take effect, enable the time-out in the ColdFusion Administrator, Server Settings page. For more information, see Configuring and Administering ColdFusion.
- The cfhttp tag supports Basic Authentication for all operations.
- The cfhttp tag uses SSL to negotiate secure transactions.
- If you put the HTTP response body in a file, ColdFusion does not put it in the CFHTTP.FileContent variable or generate a query object. If you do not put the response body in a file, ColdFusion puts it in the CFHTTP.FileContent variable; if you specify a name attribute ColdFusion generates a query object.
- The cfhttp tag does not support Digest Authentication.
- If you are using Microsoft IIS, there is no HTTP header size limit. To specify an HTTP header size limit, set it in IIS.
- The cfhttp tag ignores -_.!~*'() characters while encoding. If a URL is specified with query string with these characters as its values, then these characters are not encoded. This feature helps to avoid any issues with the URL at the receiving end.
Example
<cfhttp result="result" method="GET" charset="utf-8" url="https://www.adobe.com/"> <cfhttpparam name="q" type="formfield" value="cfml"> </cfhttp> <cfdump var="#result#">