Verfügbarkeit von URL prüfen

pepsi_gx

Erfahrenes Mitglied
Hallo,

wie kann man in VC++ eine Funktion schreiben (od. ne integierte anwenden), um die Verfügbarkeit von einem Hyperlink ("http://www.test.de") zu prüfen?

*lg*
 
Hallo,

Ich würde ganz einfach Versuchen die Seite zu öffnen. Schlägt dies fehl, ist die Seite nicht verfügbar.

Das ganze sollte z.B. mit URLDownloadToFile funktionieren denke ich.

Gruß
Anfänger
 
So was habe ich in meinem Programm getan. Aber die Funktion "URLDownloadToFile" finde ich m.E. nicht sauber: sie liefert keinen Fehlercode zurück, wenn URL nicht verfügbar ist, sondern bricht das ganze Programm mit nem Warnungsfenster ab.:mad:

Ich meine, gibts eine Funktion von selbst oder von Bibl., so daß sie zuerst prüft, ob die Website existiert. wenn nicht, kann man die Funktion "URLDownloadToFile" überspringen und irgend eine "freudliche" Warnung anzeigen und evtl. um noch mal einen Versuch bitten.

Weitere Ansätze vielleicht?

PS: :google: hat mir nicht weiter geholfen.:(
 
Zuletzt bearbeitet:
Die Funktion liefert "INET_E_DOWNLOAD_FAILURE" zurück, wenn das Ziel nicht erreichbar ist

http://msdn.microsoft.com/en-us/library/ms775123(VS.85).aspx

Wie oben schon erwähnt, die Anleitung zur Benutzung von "URLDownloadToFile" habe ich gelesen. Aber keinen Fehlercode hat sie zurückgeliefert.

Hier mein Code:
C++:
int DownloadHtml(char* url, char* filename)
{
	char strURL[100];
	char strFilename[100];

	strcpy(strURL, url);
	strcpy(strFilename, filename);

	HRESULT result=URLDownloadToFile(NULL, strURL, strFilename, NULL, NULL);
	switch(result)
	{
		case S_OK:	cout<< "Download succeeds\n" << endl; break; return 0;
		case E_OUTOFMEMORY: cout << "Out of Memory\n" << endl; break; return -1;
		case INET_E_DOWNLOAD_FAILURE: cout << "Download failure\n" << endl; break; return -1;
	}
}
Wenn sie einen ungültigen URL als Parameter bekommt, bricht sie sofort nur das ganze Programm ab ohne die von mir angegebene Warnung zurück angezeigt.
Durch Debugging habe ich "result=-2146697211" abgelesen. K.A., was soll es heißen.:confused:

PS: Ich benutze VC++ in VS 2008.
 
Hi.
C++:
int DownloadHtml(char* url, char* filename)
{
        ...
	switch(result)
	{
		case S_OK:	cout<< "Download succeeds\n" << endl; break; return 0;
		case E_OUTOFMEMORY: cout << "Out of Memory\n" << endl; break; return -1;
		case INET_E_DOWNLOAD_FAILURE: cout << "Download failure\n" << endl; break; return -1;
	}
}
Du gibst keinen Wert zurück. Die return Anweisungen werden nie ausgeführt.
Wenn sie einen ungültigen URL als Parameter bekommt, bricht sie sofort nur das ganze Programm ab ohne die von mir angegebene Warnung zurück angezeigt.
Durch Debugging habe ich "result=-2146697211" abgelesen. K.A., was soll es heißen.:confused:
Wie bereits in einem der Kommentare auf der MSDN Seite stand, sind die 3 angegebenen Rückgabewerte nicht alle möglichen Werte die zurückgegeben werden.

-2146697211 == 0x800C0005 == INET_E_RESOURCE_NOT_FOUND

Gruß
 
Hi.
Wie bereits in einem der Kommentare auf der MSDN Seite stand, sind die 3 angegebenen Rückgabewerte nicht alle möglichen Werte die zurückgegeben werden.

-2146697211 == 0x800C0005 == INET_E_RESOURCE_NOT_FOUND

Gruß

Danke! Genau das meine ich.

Wo hat man das finden können, wenn ich das bei MSDN nicht gefunden habe?
 
Auch wenn ich mich mit C++ nur wenig auskenne, kann ich dir sagen, dass sie nicht ausgeführt werden, weil deine return Anweisungen jeweils hinter einem break stehen. Du müsstest sie vor die break Anweisung schreiben.

So in etwa:
C++:
int DownloadHtml(char* url, char* filename)
{
        ...
    switch(result)
    {
        case S_OK:  cout<< "Download succeeds\n" << endl; return 0; break;
        case E_OUTOFMEMORY: cout << "Out of Memory\n" << endl; return -1; break;
        case INET_E_DOWNLOAD_FAILURE: cout << "Download failure\n" << endl; return -1; break;
    }
}
 
Zurück