Quelltext einer Website auslesen.

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Quelltext einer Website auslesen.

Beitrag von Xin » Di Sep 27, 2011 10:19 am

canlot hat geschrieben:ok Dankeschön.
Wenn ich das ganze so kompilliere und die winsocklib linke erhalte ich das:

Code: Alles auswählen

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>

    //#include <netdb.h>
    //#include <sys/types.h>
    //#include <sys/socket.h>

    #include <winsock.h>
...
es kommen keine Fehlermeldung aber auf der Console wird das ausgegeben: "Zu wenig Argumente"?
Habe das gerade mal ausprobiert:
Ich bekomme das mit Visual Studio 2010 gar nicht kompiliert?!

Er kennt read() und write() nicht. Also musst Du irgendwas anders gemacht haben, damit er das frisst?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Quelltext einer Website auslesen.

Beitrag von Xin » Di Sep 27, 2011 10:32 am

So... hier nun also mal eine Windowsversion:

Das ist ein Schnellschuss, der auf einen Schnellschuss aufsetzt, also bitte nicht als Referenzimplementierung verstehen, sondern nur als etwas, was Hinweise geben kann, wie man es richtig macht.

Meine Fragen wurden in diesem Tutorial beantwortet: http://www.c-worker.ch/tuts/wstut_op.php.

Code: Alles auswählen

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>

    //#include <netdb.h>
    //#include <sys/types.h>
    //#include <sys/socket.h>

    #include <winsock.h>

      /* Erstellt Verbindung */

    #define SERVER_PORT 80

    int main( int argc, char ** argv )
    {
      long x = 5;
      struct hostent * hostent;
      struct sockaddr_in servaddr;
      int sockfd;
      char Command[8192];
      char Buffer[1024];

      WSADATA wsa;

      WSAStartup(MAKEWORD(2,0),&wsa);

      if( argc > 1 )
      {
        hostent = gethostbyname( argv[1] );

        printf("Name    : %s\n", hostent->h_name );

        printf("Addr    : %d.%d.%d.%d\n",
                  (unsigned char) hostent->h_addr_list[0][0],
                  (unsigned char) hostent->h_addr_list[0][1],
                  (unsigned char) hostent->h_addr_list[0][2],
                  (unsigned char) hostent->h_addr_list[0][3] );
      }
      else
      {
        printf("zuwenig Argumente\n");
        exit(0);
      }

      if( (sockfd = socket( PF_INET, SOCK_STREAM, 0 )) == -1 )
      {
        printf("Socket konnte nicht geoeffnet werden\n");
        exit(0);
      }
      else
      {
        printf("Socket wurde geoeffnet\n");

        servaddr.sin_family = AF_INET;
        servaddr.sin_port   = htons( SERVER_PORT );
        servaddr.sin_addr   = * (struct in_addr*)hostent->h_addr_list[0];   // Erste Adresse einkopieren

        if( connect( sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr) ) == -1 )
        {
          printf("Verbindung konnte nicht erstellt werden\n");
          exit(0);
        }

        printf("Verbindung besteht.\n");
      }

      sprintf(Command, "GET http://%s%s HTTP/1.0\n"
                       "Host : %d.%d.%d.%d:%s\n"
                       "Connection: Keep alive\n\n",
                       argv[1],
                       (argv[2]) ? argv[2]
                                 : "/",
                       (unsigned char) hostent->h_addr_list[0][0],
                       (unsigned char) hostent->h_addr_list[0][1],
                       (unsigned char) hostent->h_addr_list[0][2],
                       (unsigned char) hostent->h_addr_list[0][3],
                       (argv[2]) ? (argv[3])
                                   ? argv[3]
                                   : "80"
                                 : "80" );

      printf("Request: %s\n", Command);

      send( sockfd, Command, sizeof( Command ), 0 );

      while( x = recv(sockfd, Buffer, 1024, 0 ) )
      {
        printf("%s\n", Buffer);
      }

      closesocket( sockfd );

      WSACleanup();
    }
Der Absturz kam dadurch, dass man bei Windows erst mit WSAStartup() die Netzwerkgeschichten in Gang bringen muss, ansonsten funktioniert gethostbyname() nicht, da das Ergebnis aber nicht überprüft wird (Schnellschuss wie gesagt...) und dann verwendet wurde, schmiert das Programm ab.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Quelltext einer Website auslesen.

Beitrag von canlot » Di Sep 27, 2011 3:22 pm

Danke hat funktioniert :D
Hab das Tutorial auch gleich mit durchgelesen da steht aber nicht wie man den Quelltext ausliest.
Unwissenheit ist ein Segen

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Quelltext einer Website auslesen.

Beitrag von Xin » Di Sep 27, 2011 3:26 pm

canlot hat geschrieben:Danke hat funktioniert :D
Hab das Tutorial auch gleich mit durchgelesen da steht aber nicht wie man den Quelltext ausliest.
Naja, den Quelltext bekommst Du ja mit meinem Progrämmchen, was Du dann damit machst, ist eine andere Sache.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Quelltext einer Website auslesen.

Beitrag von canlot » Di Sep 27, 2011 3:39 pm

Xin hat geschrieben:Naja, den Quelltext bekommst Du ja mit meinem Progrämmchen,
Stimmt jetzt geht das auf einmal. Danke!!!
Xin hat geschrieben:was Du dann damit machst, ist eine andere Sache.
Könnte ne überraschung werden :D
Unwissenheit ist ein Segen

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Quelltext einer Website auslesen.

Beitrag von oenone » Mi Sep 28, 2011 3:33 pm

canlot hat geschrieben:
oenone hat geschrieben:Du kannst auch eine fertige Bibliothek zum Holen von Webseiten benutzen: libcurl - http://curl.haxx.se/
Ja kenn ich schon lange klappt beim kompillieren aber nicht.
Kennst du ein guten Tutorial?
Da brauchst du kein Tutorial. Einfach korrekt installieren und die richtigen Flags für den Compiler benutzen.

Antworten