?
Solved

Environment variables to CGI executables

Posted on 1997-10-13
4
Medium Priority
?
302 Views
Last Modified: 2013-12-25
Dear Sir/Madam,
     Thanks for helping, I'm completly stuck.
I'm trying to setup a Web search engine on a NT 4.0
server.
I'm calling /scripts/cgi.exe, that I wrote in 'C'
as an ACTION of a html FORM statememt.
The FORM statememt has two INPUT TYPE=TEXT and one
INPUT TYPE=RADIO sections.
Chapter 8 of the help for Microsofts Internet
Explorer says the following environment variables
are setup. However as you can see from the list
below, some are not. In particular the QUERY_STRING
is not setup, its the QUERY_STRING I particualy want
to get hold of. Any idears?
Also when I manage to access the QUERY_STRING will
it need further parsing? Is there someting that Microsoft
ship for NT 4.0 Server that does the parsing for you?

      Thanks for any help you can give.

      Allan.
      cairs-support@cairs.co.uk

ALL_HTTP is: NULL<BR>
AUTH_TYPE is: NULL<BR>
CONTENT_LENGTH is: 30<BR>
CONTENT_TYPE is: application/x-www-form-urlencoded<BR>
GATEWAY_INTERFACE is: CGI/1.1<BR>
HTTP_ACCEPT is: image/gif, image/x-xbitmap, image/jpeg, */*<BR>
LOGON_USER is: NULL<BR>
PATH_INFO is: NULL<BR>
PATH_TRANSLATED is: C:\InetPub\wwwroot<BR>
QUERY_STRING is: NULL<BR>
REMOTE_ADDR is: 193.132.193.176<BR>
REMOTE_HOST is: 193.132.193.176<BR>
REMOTE_USER is: NULL<BR>
REQUEST_METHOD is: POST<BR>
SCRIPT_NAME is: /scripts/cgi.exe<BR>
SERVER_NAME is: 193.132.193.176<BR>
SERVER_PORT is: 80<BR>
SERVER_PORT_SECURE is: 0<BR>
SERVER_PROTOCOL is: HTTP/1.0<BR>
SERVER_SOFTWARE is: Microsoft-IIS/2.0<BR>
URL is: NULL<BR>
0
Comment
Question by:wrobel
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
4 Comments
 
LVL 84

Expert Comment

by:ozo
ID: 1830793
When REQUEST_METHOD is POST, QUERY_STRING is instead passed as CONTENT_LENGTH bytes from stdin
0
 
LVL 7

Accepted Solution

by:
faster earned 600 total points
ID: 1830794
ozo is correct, you can see that there is a line that reads:

REQUEST_METHOD is: POST<BR>

So you are using "POST" in the form.  You have two options:

1) modify the html that contains the form to change METHOD from "post" to "get".

2) use post method, then your cgi program should do the following: read env variable CONTENT_LENGTH, then read that much bytes from stdin.  What you will get is the same as "QUERY_STRING" in 1)

After you can that string, it will be in the form as "var1=value1&var2=value2...", you need to parse it and do the url unescaping (change '+' to ' ' and %xx to ascii value.

The rest should be simple,  just remember to include the "Content-type: text/html\r\n\r\n" line in your output
0
 

Author Comment

by:wrobel
ID: 1830795
Dear Faster,
   Thanks. Is there any product that will do
the parsing for me? I Don't want to re-invent
the wheel.
     Yours
     Allan
     cairs-support@cairs.co.uk
0
 
LVL 2

Expert Comment

by:dmethvin
ID: 1830796
If you want something that's robust and handles all possible cases, use the CGI or CGI_Lite modules in CPAN at www.perl.com. My preference is just to use this piece of code, which handles all the cases I care about. At the end the variable %FORM has the form entries:

sub parse_form {

  my $len = $ENV{CONTENT_LENGTH} || 0;
  my $buffer = '';
  if ( $len > 0 ) {            # POST
    read(STDIN, $buffer, $len);
  } else {                  # GET
    $buffer = $ENV{QUERY_STRING} || '';
  }

  # Split name-value pairs
  foreach ( split(/&/, $buffer) ) {
    my ($name, $value) = split(/=/);
    # Remove URL encoding and HTML comments
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/<!--.*?-->//gs;
    $FORM{$name} = $value;
  }

}
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Ready to improve network connectivity? Watch this webinar to learn how SD-WANs and a one-click instant connect tool can boost provisions, deployment, and management of your cloud connection.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This tutorial will discuss the log-in process using WhizBase. In this article I assume you already know HTML. I will write the code using WhizBase Server Pages, so you need to know some basics in WBSP (you might look at some of my other articles abo…
In threads here at EE, each comment has a unique Identifier (ID). It is easy to get the full path for an ID via the right-click context menu. However, we often want to post a short link within a thread rather than the full link. This article shows a…
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question