Matt Gifford aka coldfumonkeh | Consultant Developer
View Github Profile

Lucee 5 _InternalRequest method

Oct 25, 2019

Today I found out about a non-publicised hidden function in the Lucee CFML engine: _InternalRequest.

Let’s take a look at what it is and how you might use it.

What it is

This function essentially acts as an internal http request, allowing you to make a request to the CFML engine internally.

It’s not actually an http request as we currently know it, but it acts the same way and produces similar results.

Here’s a quick example.

Let’s say my application has an all-powerful template that returns some crucial JSON (impressive, right?):

If we hit that page directly in the browser we would receive the expected JSON response:

The raw JSON response

We can make the same request to the template from elsewhere within our application using the _InternalRequest() function:

This request would result in the following struct response:

The _InternalRequest struct response

Let’s update the example and send some information through in the GET request:

By sending through the url property in the function, we are effectively calling the given template as if we were requesting it directly in the browser like so:

The updated response would look like this:

The second _InternalRequest struct response

How you might use it

It’s a great function that can be used for making internal http requests, so you might have a use case for it somewhere within your application (perhaps in a controller where you’re calling an API module prior to rendering the template).

For me, this function opens a lot of doors when it comes to creating integration tests.

Let’s assume that I have an API template within my application and I want to run integration tests on it using TestBox to make sure that the actual code performs as expected, and not testing against a mocked version.

By using _InternalRequest, we can easily make these requests to internal templates and actually test the responses that your app would give to users.

The arguments

Here’s a breakdown of the arguments accepted by the function:

template - template path (script name) for the request (example:/test/index.cfm)

method - method of the request (GET,POST,PUT,DELETE…)

urls/url (alias) - URL scope passed to the request (query string)

forms/form (alias) - FORM scope passed to the request

cookies/cookie (alias) - COOKIE scope passed to the request

headers/header (alias) - Request header entries passed to the request

body - body to send with the request

charset - charset used for the request, if not set the web charset is used

addtoken - if yes/true, add urltoken as cookie

A detailed breakdown of the complete function data can be found in the following gist on

Latest Blog Posts

Dec 23, 2019
CFML content moderation detection component library
Read More