Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Zugriff auf Internet

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.05.2007, 21:02 Uhr
~ShinichiKudo
Gast


Hallo zusammen,
ich suche nach Programmbeispielen oder Hilfe, wie ich mit meinem Programm den Quellcode einer Website runterladen kann, um ihn anschließend zu durchsuchen. Kann ich dies mit receive machen oder gibt es Alternativen o.ä.?

Danke für die Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.05.2007, 00:37 Uhr
Blubber2063



Socket erzeugen, HTTP Protokoll impelementieren, Datei empfangen, bearbeiten.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.05.2007, 09:50 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oder einfacher: libcurl verwenden.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.05.2007, 12:33 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Warum immer so umständlich?

Einfach mit URLDownloadToFile runterladen. Oder wenn du mehr Kontrolle brauchst mit InternetReadFile.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.05.2007, 13:31 Uhr
Tron



Moin,

hier mal ein Beispiel:

C++:
/* Dateiname: httpget.c

   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 <winsock2.h>
#include <io.h>    // write

// http requests werden normalerweise auf Port 80
// vom Server entgegengenommen
#define HTTP_PORT 80

//------------------------------------------------------------------------------
int main( int argc, char **argv)
{
  struct sockaddr_in server;
  struct hostent *host_info;
  unsigned long addr = 0;
  int sock = 0;
  char buffer[4096];
  int count = 0;
  
/** Die Windows Socket WSAStartup Funktion initialisiert die WS2_32.DLL
    für den Gebrauch durch einen Prozess. Das Makro MAKEWORD übergibt
    die Versionnummer der verwendeten Socketversion, wsa ist ein Pointer auf
    WSADATA wird hier nicht benötigt.

    WSAStartup gibt bei einem Fehler einen Wert ungleich NULL zurück.
    Dieser Fehlercode kann mit WSAGetLastError abgefragt werden.
    */

  WSADATA wsa;
  if(WSAStartup(MAKEWORD(2, 0),&wsa)!=0)
  {
    fprintf(stderr, "Fehler: %ld bei Initialisierung der Ws2_32.dll",
        WSAGetLastError());
    // WSACleanup - Socket (WS2_32.dll) nach Gebrauch entfernen.
    WSACleanup();
    return 1;
  } // ende if

  // Parameter prüfen.
  if (argc != 3)
  {
    fprintf(stderr, "Nutze: httpget [Servername] [/Dateiname]\n");
    WSACleanup();  // s.o.
    return 1;
  } // ende if

  // Socket erzeugen.
  sock = socket(PF_INET, SOCK_STREAM, 0);
  if (sock < 0)
  {
    perror("Fehler beim anlegen des Socket");
    closesocket(sock);
    WSACleanup(); // s.o.
    exit(1);
  } // ende if

  // Socketadresse erzeugen
  // besteht aus Typ, IP-Adresse und Portnummer.
  // Setzt die ersten n Bytes von server auf den Wert 0.
  memset(&server, 0, sizeof (server));
  // Konvertieren der als Argument übergeben Adresse des Servers.
  if ((addr = inet_addr( argv[1])) != INADDR_NONE)
  {
    // argv[1] ist eine numerische IP-Adresse.
    // kopiere den Inhalt von addr nach server.sin_addr.
    memcpy((char *)&server.sin_addr, &addr, sizeof(addr));
  } // ende if
  else
  {
    // Servernamen nach IP-Adresse.
    host_info = gethostbyname(argv[1]);
    if (NULL == host_info)
    {
      fprintf(stderr, "Unbekannter Server: %s\n", argv[1]);
      closesocket(sock);
      WSACleanup(); // s.o.
      return 1;
    } // ende if
    // kopiere den inhalt von host_info->h_addr nach server.sin_addr.
    memcpy((char *)&server.sin_addr, host_info->h_addr, host_info->h_length);
  } // ende else
  // Protokol und Port.
  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("Fehler beim verbinden mit Server");
    closesocket(sock);
    WSACleanup();  // s.o.
    return 1;
  } // ende if

  // Erzeuge und sende den http GET request.
  // RFC 2616  Hypertext Transfer Protocol -- HTTP/1.1

  sprintf(buffer, "GET %s HTTP/1.1\nHost: %s\r\n\r\n", argv[2], argv[1]);
  send( sock, buffer, strlen( buffer), 0);
  // Hole die Serverantwort und gib sie auf der Konsole aus.
  while(count != SOCKET_ERROR )
  {
    count = recv(sock, buffer, sizeof(buffer), 0);
    if (count == 0 )
    {
      printf("Verbindung beendet.\n");
      break;
    } // ende if
    // Ausgabe des HTML Headers und der angeforderten Seite.
    write(1, buffer, count);
  } // ende while
  if (count == SOCKET_ERROR )
  {
    printf("Fehler: %ld beim Empfang!\n", WSAGetLastError());
  } // ende if
  // Schließe Socket.
  closesocket(sock);
  // WSACleanup - Socket ( WS2_32.dll) nach Gebrauch entfernen.
  WSACleanup();
  return 0;
}


Gruß Tron
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.05.2007, 13:43 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



C++:
#include <Urlmon.h>

#pragma comment (lib,"Urlmon.lib")

int main()
{
    URLDownloadToFile(0,"http://www.google.de","c:\\google.txt",0,0);
    return 0;
}




Dieser Post wurde am 08.05.2007 um 13:43 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.05.2007, 14:29 Uhr
~ShinichiKudo
Gast


Hallo zusammen,
danke für die zahlreichen Antworten. Da ich momentan eure Beispiele nicht testen kann, werde ich heute Abend mal alle ausprobieren
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
08.05.2007, 17:33 Uhr
~ShinichiKudo
Gast


Hallo Tron,
klingt jetzt zwar blöd, aber wo gebe ich meine Adresse der Website ein? Der Quellcode funktioniert einwandfrei, nur weiß ich nicht, wo ich meine Adresse eingebe

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
08.05.2007, 18:16 Uhr
Oliver
S2-Pixelgeneral


Da statt argv[1]:


C++:
// Servernamen nach IP-Adresse.
host_info = gethostbyname(argv[1]);


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: