Kommunikation mit HTTP-Protokoll
-
Hallo ich beschäftige mich gerade damit, wie ich einen Web-Grabber erstellen könnte, bekomme dabei aber atm noch 9 nicht aufgelöste externe Verweise, die ich nicht ganz verstehe.
//-------------------------------------------------------------------- // 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> #include <stdlib.h> #include <string.h> #define closesocket(s) close(s) #endif // http requests werden normalerweise auf Port 80 vom Server entgegengenommen #define HTTP_PORT 80 //------------------------------------------------- // Main - Funktion //------------------------------------------------- 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 { host_info = gethostbyname( argv[1]); // Wandle den Servernamen in eine IP-Adresse um 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; }
Schonmal Danke an alle
-
linke die passende library dazu, glaub für winsock.h ist es wsock32.lib, schau mal in der msdn.
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Es wäre hilfreich wenn du sagst welche Verweise das sind.
Die kann man dann auch einfach nachschlagen, Beispiel: WSAStartup -> http://social.msdn.microsoft.com/Search/en-US?Refinement=86&Query=WSAStartup&ir=1 -> Library: Ws2_32.lib, DLL: Ws2_32.dll
-
Danke habe die lib eingebunden mit:
#pragma comment(lib, "wsock32.lib")
funktioniert jetzt!