[Winsocket] - 404 Error beim Anwählen von Internetsites



  • Tach,
    ich hab mir letztens mal den nen kleinen WebClient geschrieben, und wollte mir damit den HTML Code einer Seite ausgeben lassen. Leider bekomme ich immer einen 404 Error, obwohl es die Seite gibt 😞
    Hier ist der Source in C, vielleicht liegts ja an dem *hoff*

    Code:

    /* httpget.c
    * Es wird ein GET request via http an einen Webserver
    * gesendet und das Ergebnis auf der Konsole ausgegeben.
    * queeker Copyright (C) by queeks. All rights reserved. */
    #include <stdio.h>
    #include <errno.h>
    
    #ifdef _WIN32
    /* Headerfiles für Windows */
    #include <winsock.h>
    #include <io.h>
    #include <stdio.h>
    
    #else
    /* Headerfiles für Unix/Linux */
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #define closesocket(s) close(s)
    #endif
    
    /* HTTP Port 80 */
    #define HTTP_PORT 80
    
    /****************** MAIN *********************/
    int main()
    {
        struct sockaddr_in server;
        struct hostent *host_info;
        unsigned long addr;
        int sock;
        char buffer[8192];
        int count;
       char Url[20];
       char File[60];
    
    #ifdef _WIN32 
        /* Initialisiere TCP für Windows ("winsock") */
        short wVersionRequested;
        WSADATA wsaData;
        wVersionRequested = MAKEWORD (1, 1);
        if (WSAStartup (wVersionRequested, &wsaData) != 0) {
            fprintf( stderr, "Konnte winsocket nicht initialisieren.\n");
            exit(1);
        }
    
    #endif
        /* Erzeuge das Socket */
        sock = socket( PF_INET, SOCK_STREAM, 0);
        if (sock < 0) {
            perror( "Konnte Socket nicht erstellen.");
            exit(1);
        }                                                                                       
    
       printf("\t\t\t****************\n");
       printf("\t\t\t Q U E E K E R\n");
       printf("\t\t\t****************\n");
       printf("Url: ");
       scanf("%s", &Url);
       printf("Datei: ");
       scanf("%s", &File);
    
        /* Erzeuge die Socketadresse des Servers
         * Sie besteht aus Typ, IP-Adresse und Portnummer */
        memset( &server, 0, sizeof (server));
        if ((addr = inet_addr( SERVER)) != INADDR_NONE) {
            /* SERVER 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( Url );
            if (NULL == host_info) {
                fprintf( stderr, "Unbekannter Server: %s\n", Url);
                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( "Konnte keine Verbindung aufbauen zu Server");
            exit(1);
        }
    
        /* Erzeuge und sende den http GET request */
        sprintf( buffer, "GET %s HTTP/1.0\n\n", File);
        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);
       system("PAUSE");
        return count;
    }
    


  • sprintf( buffer, "GET %s HTTP/1.0\n\n", File); <= Da sollte man besser auch "Host: www.server.de" mitsenden!



  • wo genau denn?



  • Wenn Du folgende Datei anforderst:
    http://www.test.de/startseite/bla.html

    Dann sollte dein GET-Request so aussehen:
    sprintf( buffer, "GET http://www.test.de/startseite/bla.html HTTP/1.0\nHost: [url=http://www.test.de\n\n]www.test.de\n\n[/url]");



  • jo, funkt, danke (das 1. board wo sie's geschafft haben :))



  • Hehe, das Problem gabs hier schon öfter 😉
    Nur das es meistens keinen 404-Fehler gab, sondern meistens nen 400er "Bad Request" 😉



  • Hehe, das Problem gabs hier schon öfter 😉

    Ist's schon in den FAQs? wäre dann mal ne Idee, oder?

    Nur das es meistens keinen 404-Fehler gab, sondern meistens nen 400er "Bad Request" 😉

    Hehe, ich hatte mir schon ne 404, ne 400 und eine 500 Fehlerseite vom Server generieren lassen 😉


Anmelden zum Antworten