HTTPGET

Aufruf mit httpget meinwebserver /meineseite.html
Geht nicht mit Proxy.

httpget.c
/* http://cplus.kompf.de/artikel/httpget.html
 * httpget.c
 * Kompilierung durch gcc httpget.c -o httpget
 * 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> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <netdb.h> 
#include <stdlib.h> 
#include <string.h> 
#define closesocket(s) close(s)
 
/* 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;
 
 
    /* 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\r\n\r\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;
}