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! 🙂


Anmelden zum Antworten