Datei wird nur einmal downgelodet

Hm,

Sockets wären bei meiner Umgebung nicht besonders angebracht. Proxys ebenfalls nicht...

Ein HTML-Request würde wahrscheinlich gehen. Ich habe versucht ihn anzuwenden aber irgendwie nix geschafft. Kann mir jemand bitte erklären wie man mit ihm umgeht?
 
Mir würde es auch genügen wenn mir jemand erklären würde wie ich mit einer WinINet-Funktion eine Datei downloade und dabei den Cash ignoriere.

Ich muss es schnell wissen.
 
Also da ich grundsätzlich nur die Funktion URLDownloadToFile benutze ist mir das ganze etwas fremd.


Also ich habe das hier:

Code:
 LPVOID lpBuffer;
  HINTERNET Adresse;
  Adresse = InternetOpen("IExplorer",INTERNET_OPEN_TYPE_DIRECT,0,0,INTERNET_FLAG_ASYNC);
  Adresse = InternetOpenUrl(Adresse,"http://kaiser206.no-ip.info/shell.php",0,0,INTERNET_FLAG_EXISTING_CONNECT,"IExplorer");
  InternetReadFile(Adresse,lpBuffer,100,0);

Ist es korrekt?
Was mache ich jetzt mit lpBuffer?
 
Die Frage ist, was machst du vorher mit lpbuffer. Du übergibst den Speicher, wo die Funktion die empfangenen Daten reinschreiben darf. Ich mache das in einem Beispiel so:

Hinweis: Absolut unoptimiert, die Bytes einzeln rauszunehmen. m_bbResult ist eine eigene Klasse, die einen Speicherbereich verwaltet und da auch Daten anhängen kann.

Code:
    char          cChar = 0;

    DWORD         dwBytesRead = 0;

    m_bbResult.Clear();

    while ( InternetReadFile( hInetData, &cChar, 1, &dwBytesRead ) ) 
    {
      if ( dwBytesRead == 0 )
      {
        // fertig
        break;
      }
      m_bbResult.AppendByte( cChar );
}

Den Speicher kannst du dann in eine Datei schreiben oder direkt auslesen.
Ich bin mir nicht sicher, ob man die Datei so direkt laden kannst, wie du das machst, ich habe die Internet-Funktionen immer mit einem Http-Request verbunden.

Willst du die PHP-Datei runterladen wie sie ist? Oder ausgeführt haben? Wenn es Letzteres ist, dann musst du da einen HTTP-Request hinschicken:

InternetOpen
InternetConnect
HttpOpenRequest
HttpSendRequest
InternetReadFile-Schleife

und alles wieder schön zumachen!
 
Also ich blicke da irgendwie nicht durch. Bei Microsoft beschreiben sie das so wie ichs gemacht habe... Aber das scheint ja nicht zu gehen.

Ich will einfach nur eine Datei die sich dauernd ändert über den Internet Explorer(oder ohne) in einem bestimmten Zeitabstand downloaden. Die Datei ist ein PHP-Script das ausgeführt wird und anhand der IP mehrere Zeilen ausgibt. Mit URLDownloadToFile ging ja auch alles aber eben nur einmal...
 
Zuletzt bearbeitet:
Sorry, ich dachte sowas gibt es zuhauf im Netz.

Sieh dir mal die Seite bei MSDN an: http://windowssdk.msdn.microsoft.co...brary/en-us/wininet/wininet/http_sessions.asp

Dort ist der grundlegende Ablauf erklärt. Zusätzlich gibt es einen schönen Sourcecode-Schnipsel, der das Gehample mit InternetReadFile erklärt. Wie man die Verbindung aufbaut hast du ja vermutlich schon hinbekommen.

Das solltest du dir eigentlich recht einfach anpassen können.
 
Tja das ist es ja. Ich hab nicht einmal die Verbindung hinbekommen...

Bei MSDN steht viel drin doch ich komme irgendwie nicht weiter als InternetOpen.

Kann mir jemand bitte eine Brauchbare deutsche Syntax für InternetConnect() geben?
---------
Aber ich sehe immenoch nicht ein wo ich nun einstellen kann den cash zu ignorieren...
 
Hier mal ein Schnipsel von mir, mit der CByteBuffer-Klasse (m_bbResult), hier musst du selbst etwas ändern. Das Byte in eine Datei schreiben oder Ähnliches.

Code:
  HINTERNET   hInet = InternetOpen( "MeinProgramm", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | INTERNET_FLAG_PRAGMA_NOCACHE );
  if ( hInet == NULL )
  {
    return false;
  }

  HINTERNET   hInetConnection = InternetConnect( hInet, m_strHostAddress.c_str(), m_wHostPort, 0, 0, INTERNET_SERVICE_HTTP, 0, 0 );
  if ( hInetConnection == NULL )
  {
    InternetCloseHandle( hInet );
    return false;
  }


  std::string       strBase = m_strHostURL;

  HINTERNET   hInetData = HttpOpenRequest( hInetConnection, "POST", strBase.c_str(), "HTTP/1.0", NULL, NULL, INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | INTERNET_FLAG_PRAGMA_NOCACHE, 0 );
  if ( hInetData == NULL )
  {
    InternetCloseHandle( hInetConnection );
    InternetCloseHandle( hInet );
    return false;
  }

  std::string   strParams;

  strParams = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)";

  if ( HttpSendRequest( hInetData, 
                        strParams.c_str(), 
                        (DWORD)strParams.length(),
                        (LPVOID)bbDaten.Data(),
                        (DWORD)bbDaten.Size() ) )
  {
    // erfolgreich

    char          cChar = 0;

    DWORD         dwBytesRead = 0;

    m_bbResult.Clear();

    while ( InternetReadFile( hInetData, &cChar, 1, &dwBytesRead ) ) 
    {
      if ( dwBytesRead == 0 )
      {
        // fertig
        break;
      }
      // ein weiteres Byte gelesen
      m_bbResult.AppendByte( cChar );
    }

    DWORD   dwError = GetLastError();

    if ( dwError == ERROR_INTERNET_EXTENDED_ERROR  )
    {
      DWORD     dwExError = 0;
      char      szTemp[5000];
      DWORD     dwSize = 5000;

      if ( InternetGetLastResponseInfo( &dwExError, szTemp, &dwSize ) )
      {
        // Fehler steht in szTemp
      }
    }

    // jetzt sind dwBytesRead Bytes eingelesen
  }
  else
  {
    // ein Fehler ist aufgetreten
    GR::u32     dwLastError = GetLastError();

    return false;
  }

  InternetCloseHandle( hInetData );
  InternetCloseHandle( hInetConnection );
  InternetCloseHandle( hInet );

Das INTERNET_FLAG_PRAGMA_NOCACHE Flag gibt an, dass die Antwort nicht vom Cache kommen soll.
 
Zurück