Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

http-Download mit MFC

Empfohlene Antworten

Hallo ich habe ein Problem, an dem ich schon ein paar Tage sitze:

Ich muß einige Dateien aus dem Internet downloaden per http.

Mit Textdateien scheint das auch zu funktionieren, aber mit den Grafikdateien habe ich große Probleme:

Es wird kein Fehler ausgegeben oder so.

Es wird aber nur ein Teil der Grafikdatei heruntergeladen

z.B. 5.088 Bytes anstatt 6.449 Bytes.

Bitte helft mir, wo ist der Fehler?

Dazu benutze ich folgenden Code:


#define HTTPBUFLEN    512 // Size of HTTP Buffer...


BOOL    bStripMode = FALSE;

BOOL    bProgressMode = FALSE;


DWORD dwHttpRequestFlags =

	INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT;


const TCHAR szHeaders[] =

	_T("Accept: text/plain, text/html, image/png\r\nUser-Agent: -unbekannt-\r\n");


try

{

  CHttpFile* pFile = NULL;

  CHttpConnection* pServer = NULL;

  CString strServerName;

  INTERNET_PORT nPort;

  DWORD dwServiceType;

  CString strObject;

  if(!AfxParseURL(strFile,dwServiceType,strServerName,strObject,nPort) || dwServiceType != INTERNET_SERVICE_HTTP)

  {

     AddToLoglist("ERROR: Fehler beim Ermitteln der Remote-Datei");

     return FALSE;

  }

  pServer = m_pSession->GetHttpConnection(strServerName,nPort);	

  pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET,strObject, NULL, 1, NULL, NULL, dwHttpRequestFlags);


  pFile->AddRequestHeaders(szHeaders);

  pFile->SendRequest();


  DWORD dwRet;

  pFile->QueryInfoStatusCode(dwRet);


  if(dwRet==HTTP_STATUS_OK)

  {

    pFile->SetReadBufferSize(4096);  

    CString strText;


    char httpbuff[HTTPBUFLEN];

    int numbytes;


    while (numbytes = pFile->Read(httpbuff, HTTPBUFLEN))

       pLocalFile->Write(httpbuff, numbytes);


    if(pFile !=NULL)

    {

	pFile->Close();

	delete pFile;

	pFile = NULL;

    }

    if(pServer != NULL)

    {

        pServer->Close();

	delete pServer;

	pServer = NULL;

    }

    return TRUE;

  }

  else

  {

    if(pFile !=NULL)

    {

	pFile->Close();

	delete pFile;

	pFile = NULL;

    }

    if(pServer != NULL)

    {

        pServer->Close();

	delete pServer;

	pServer = NULL;

    }

    CString strTemp;

    strTemp.Format(_T("ERROR: bei Anfrage auf %s: Rückgabe: %d."),strFile,dwRet);

    AddToLoglist(strTemp);

    return FALSE;

  }

}

catch(CInternetException *E)

{

  TCHAR szError[MAX_PATH];

  E->GetErrorMessage(szError,MAX_PATH);

  CString strTemp;

  strTemp = (CString)"ERROR: " + (LPCTSTR)szError;

  AddToLoglist(strTemp);

  E->Delete();

  return FALSE;

}

catch(CFileException *E)

{

  TCHAR szError[MAX_PATH];

  E->GetErrorMessage(szError,MAX_PATH);

  CString strTemp;

  strTemp = (CString)"ERROR: " + (LPCTSTR)szError;

  AddToLoglist(strTemp);

  E->Delete();

  return FALSE;

}

<FONT COLOR="#a62a2a" SIZE="1">[ 28. November 2001 10:04: Beitrag 1 mal editiert, zuletzt von mst ]</font>

Ich würde die Dateinamen abchecken. Stimmt irgendein Filetyp nicht mit html überein (Kein Tag am Start), dann würde ich lieber versuchen über CInternetFile einzulesen - oder gleich alle Files. Vielleicht werden irgendwelche Bytes über HTTP als Steuerzeichen interpretiert und es wird halt einfach abgebrochen. CInternetFile sollte da keine Rücksicht drauf nehmen.

<FONT COLOR="#a62a2a" SIZE="1">[ 28. November 2001 10:25: Beitrag 3 mal editiert, zuletzt von Crush ]</font>

Die Dateinamen passen nicht mit html überein, aber das sollte eigentlich wegen der Zeile

 const TCHAR szHeaders[] =	_T("Accept: text/plain, text/html, image/png\r\nUser-Agent: -unbekannt-\r\n"); 

trotzdem funktionieren.

Die Idee mit CInternetFile probiere ich gerade aus.

Ich hoffe nur, das man damit auch in passwortgeschütze Bereiche kommt.

Andere Idee: An welchen Stellen im http-Protokoll wird zwischen ASCII- und Binären- Dateien unterschieden?

Mit text/plain und text/html funktioniert das alles.

Danke für die Hilfe

Kopier Dir doch einfach mal eins von den abgebrochenen Gifs runter und schau am entsprechenden Offset an dem Dein Programm abgebrochen hat nach was da steht. Es gibt ja für Binärdaten ein spezielles Tag:

Formatierte Texteingabe (preformatted) <PRE>

Eine Eingabe von:

<PRE>

11111000000 binär

3700 oktal

7C0 hexadezimal

1984 dezimal

</PRE>

Bewirkt eine Darstellung wie:

11111000000 binär

3700 oktal

7C0 hexadezimal

1984 dezimal

Das wird schon seinen Sinn haben. Weil nämlich bestimmte Binärkombinationen in roher Form den Browser abschießen werden - er weiß ja nicht mehr, ab wann die Binärdaten aufhören sollten ohne Tags.

<FONT COLOR="#a62a2a" SIZE="1">[ 28. November 2001 10:45: Beitrag 2 mal editiert, zuletzt von Crush ]</font>

Die Variante mit dem CInternetFile hat funktioniert.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.