OT Adam D Ruppe's web stuff
Adam D. Ruppe
destructionator at gmail.com
Thu Feb 9 06:56:02 PST 2012
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.
More information about the Digitalmars-d
mailing list