|
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;
}
|
|