Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

Re: Decode perl cgi response in C

by davido (Archbishop)
on Jul 22, 2013 at 01:06 UTC ( #1045555=note: print w/replies, xml ) Need Help??

in reply to Decode perl cgi response in C

cURL and libcurl are C-based projects. curl will happily fetch plain text given a URL. Firefox is written mostly in C as well. Perl is written in C, and obviously is up to the task. These are examples of C projects that can send requests to a webserver, listen on a port for a response, and handle it when it comes in. Plain text is probably the easiest response to handle.

You don't have to look very far to find C programs interacting with webservers. Is that really what you were asking?


Replies are listed 'Best First'.
Re^2: Decode perl cgi response in C
by stenasc (Novice) on Jul 22, 2013 at 08:25 UTC

    Yes, I have write some C TCP/UDP web clients and servers in the past and I don't have an issue there. What I have is an embedded system, that needs to process the test output from a cgi file. I hust need a little info on the way to decode this data. I send a post command to the cgi file on the server and wait for a response. Instead of the desired test response, which should be "Hello", I receive the text responses "Download" and "OK". I will read up on cURL to find out the details on the ports so I can decode the text.

      I get the feeling that you want help on the HTTP protocol. If you don't have (or can't use) any libraries to help, a minimal method would be to open a TCP connection and send a request message, which consists of the following:
      • A request line, for example GET /images/logo.png HTTP/1.1, which requests a resource called /images/logo.png from the server.
      • Request Headers, such as Accept-Language: en
      • An empty line.
      • An optional message body.
      The request line and headers must all end with <CR><LF> (that is, a carriage return character followed by a line feed character). The empty line must consist of only <CR><LF> and no other whitespace. In the HTTP/1.1 protocol, all headers except Host are optional (but in practice, it's also optional if there's only one name associated with the IP address). A request line containing only the path name is accepted by servers to maintain compatibility with HTTP clients before the HTTP/1.0 specification.

      You will then be able to read the response message, which consists of the following:

      • A Status-Line (for example HTTP/1.1 200 OK, which indicates that the client's request succeeded)
      • Zero of more Response Headers, such as Content-Type
      • An empty line
      • An optional message body
      The Status-Line and headers must all end with <CR><LF> (a carriage return followed by a line feed). The empty line must consist of only <CR><LF> and no other whitespace.

      On my computer, entering the command "telnet 80" returns the message "Connecting To". If I then enter the command "GET / HTTP/1.1" and hit the <Enter> key twice, I get the following:

      HTTP/1.1 200 OK Via: 1.1 ETC-USRPXY-02 Connection: Keep-Alive Proxy-Connection: Keep-Alive Content-Length: 47589 Date: Wed, 24 Jul 2013 14:08:33 GMT Age: 74 Content-Type: text/html ETag: "b9e5-4e24268fd6b00" Server: Apache/2.2.24 Accept-Ranges: bytes Last-Modified: Wed, 24 Jul 2013 14:06:04 GMT <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html xmlns="" xml:lang="en"> <head>
      ... followed by roughly 47 KB of other data. You can experiment by using telnet to connect to your server and see what you get back.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1045555]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (2)
As of 2018-03-21 02:19 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (263 votes). Check out past polls.