Aufruf mit httpget meinwebserver /meineseite.html
Geht nicht mit Proxy.
/* 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; }