[C\C++] Wie kann ich HTTP Inputs in C/C++ lesen?

LinzT

Grünschnabel
Also, ich habe da meinen schönen kleinen Webserver NT4.0 + Xitami, und möchte zu Abwechselung mal ein CGI-Proggi in C/C++ entwickeln. Die Ausgabe klappt schon, nun aber: wie kann ich die Formulardaten der aufrufenden HTML Datei lesen? Ich hab schon ein paar CGI Headerdateien runtergeladen´, die haben aber durch die Bank nicht gefunzt. Irgendwie kann man das doch bestimmt per Hand machen, oder?

Thanx!

LinzT

ps: Hmm, wäre vielleicht ganz praktisch wenn ich sagen würde welchen Compiler ich verwende, oder? Borland C++ 5.5 Konsole
 
Zuletzt bearbeitet:
meinst du sowas?

Code:
/* httpget.c
 * Demoprogramm zur Programmierung von Netzwerkclients
 * Es wird ein GET request via http an einen Webserver 
 * gesendet und das Ergebnis auf der Konsole ausgegeben. */
#include <stdio.h>
#include <errno.h>

#ifdef _WIN32
/* Headerfiles für Windows */
#include <winsock.h>
#include <io.h>

#else
/* Headerfiles für Unix/Linux */ 
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define closesocket(s) close(s)
#endif

/* http requests werden normalerweise auf Port 80 
 * vom Server entgegengenommen */
#define HTTP_PORT 80

/****************** MAIN *********************/
int main( int argc, char **argv)
{
    struct sockaddr_in server;
    struct hostent *host_info;
    unsigned long addr;
    int sock;
    char buffer[8192];
    int count;
    
    
#ifdef _WIN32  
    /* Initialisiere TCP für Windows ("winsock") */
    short wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD (1, 1);
    if (WSAStartup (wVersionRequested, &wsaData) != 0) {
        fprintf( stderr, "Failed to init windows sockets\n");
        exit(1);
    }
#endif

    /* Sind die erforderlichen Kommandozeilenargumente vorhanden? */
    if (argc != 3) {
        fprintf( stderr, "usage: httpget server file\n");
        exit(1);
    }

    /* Erzeuge das Socket */
    sock = socket( PF_INET, SOCK_STREAM, 0);
    if (sock < 0) {
        perror( "failed to create socket");
        exit(1);
    }

    /* Erzeuge die Socketadresse des Servers 
     * Sie besteht aus Typ, IP-Adresse und Portnummer */
    memset( &server, 0, sizeof (server));
    if ((addr = inet_addr( argv[1])) != INADDR_NONE) {
        /* argv[1] ist eine numerische IP-Adresse */
        memcpy( (char *)&server.sin_addr, &addr, sizeof(addr));
    }
    else {
        /* Wandle den Servernamen in eine IP-Adresse um */
        host_info = gethostbyname( argv[1]);
        if (NULL == host_info) {
            fprintf( stderr, "unknown server: %s\n", argv[1]);
            exit(1);
        }
        memcpy( (char *)&server.sin_addr, host_info->h_addr, host_info->h_length);
    }

    server.sin_family = AF_INET;
    server.sin_port = htons( HTTP_PORT);

    /* Baue die Verbindung zum Server auf */
    if ( connect( sock, (struct sockaddr*)&server, sizeof( server)) < 0) {
        perror( "can't connect to server");
        exit(1);
    }

    /* Erzeuge und sende den http GET request */
    sprintf( buffer, "GET %s HTTP/1.0\n\n", argv[2]);
    send( sock, buffer, strlen( buffer), 0);

    /* Hole die Serverantwort und gib sie auf Konsole aus */
    do {
        count = recv( sock, buffer, sizeof(buffer), 0);
        write( 1, buffer, count);
    }
    while (count > 0); 

    /* Schließe Verbindung und Socket */
    closesocket( sock);
    return count;
}
 
Nein, nicht ganz.... :rolleyes:

Ich suche eher was womit ich ein CGI Proggi erstellen kann. Statt in Perl oder Pzthon halt in C/C++. Was ich genau suche ist eine Moeglichkeit die HTTP Variablen GET und/oder POST zu bearbeiten.

Ich glaub ich hab aber mittlerweile eine Loesung gefunden, sollte es klappen werd ich sie hier mal posten.

Trotzdem bin ich fuer alle weiteren Antworten dankbar! :)
 
Zurück