On 2012-02-09 15:56, Adam D. Ruppe wrote:
On Thursday, 9 February 2012 at 08:26:25 UTC, Jacob Carlborg wrote:
For example, ENV["REQUEST_URI"] returns differently on different
servers. Rails provides a method, "request_uri" on the request object
that will return the same value on all different servers.

I don't know if CGI already has support for something similar.

Yeah, in cgi.d, you use Cgi.requestUri, which is an immutable
string, instead of using the environment variable directly.

requestUri = getenv("REQUEST_URI");
// Because IIS doesn't pass requestUri, we simulate it here if it's empty.
if(requestUri.length == 0) {
// IIS sometimes includes the script name as part of the path info - we
don't want that
if(pathInfo.length >= scriptName.length && (pathInfo[0 ..
scriptName.length] == scriptName))
pathInfo = pathInfo[scriptName.length .. $];

requestUri = scriptName ~ pathInfo ~ (queryString.length ? ("?" ~
queryString) : "");

// FIXME: this works for apache and iis... but what about others?





That's in the cgi constructor. Somewhat ugly code, but I figure
better to have ugly code in the library than incompatibilities
in the user program!

The http constructor creates these variables from the raw headers.


Here's the ddoc:
http://arsdnet.net/web.d/cgi.html

If you search for "requestHeaders", you'll see all the stuff
following. If you use those class members instead of direct
environment variables, you'll get max compatibility.

Cool, you already thought of all of this it seems.

--
/Jacob Carlborg

Reply via email to