2009-07-15 5 views
0

Ich wurde damit beauftragt, wöchentlich eine Datenbank durchzugehen und alle Links zu überprüfen. Ich arbeite normalerweise in PHP, aber in PHP wäre das sehr langsam (es würde die Seite nach ungefähr 100 URLs automatisch auslaufen lassen), also entschied ich mich für eine schnelle C++ App.Link Checker mit ShellExecute?

Admitidly, ich habe nicht C++ seit dem College verwendet, also bin ich ein bisschen eingerostet.

Ich fand die ShellExecute-Funktion, und dass es die Seite kein Problem öffnen würde. Hier ist, was ich bisher:

#include <shlobj.h> 
#include <iostream> 
using namespace std; 
int main() 
{ 
     if( ShellExecute(NULL,"find","http://example.com/fdafdafda.php",NULL,NULL,SW_SHOWDEFAULT)) 
     { 
      cout << "Yes"; 

     } else { 
      cout << "No"; 
     } 
     cout << endl; 
    system("PAUSE"); 
    return 0; 
} 

Das Problem ist, dass es immer true zurück, ob es sich um eine gültige Seite oder nicht öffnen. Es scheint zu prüfen, ob die zugehörige App (in diesem Fall ein Browser) in der Lage ist, das Dokument ohne Probleme zu öffnen, und gibt dann true zurück. Es sieht nicht aus, ob der Browser 404 bekommt oder nicht, er sieht es einfach offen und läuft und es geht ihm gut.

Gibt es einen besseren Weg, dies zu tun? Vermisse ich einen Schritt?

Nebenbei habe ich versucht, das cURLcpp-Zeug zu verwenden, aber ich kann es nicht herausfinden. Alle Beispiele verweisen auf Header-Dateien, die nicht im Download vorhanden sind. Ich habe das Gefühl, cURLcpp ist die besser Weg, dies zu tun.

Danke für jede Hilfe.

+0

ShellExecute, auch wenn Sie es erhalten, zu arbeiten, wird auch unglaublich langsam sein. cURL ist der Weg zu gehen. Versuchen Sie es noch einmal und schreiben Sie eine Frage, wenn Sie nicht weiterkommen. – ravenspoint

Antwort

3

Ich denke, Sie haben Ihre eigene Frage beantwortet. ShellExecute ist für diese Aufgabe wirklich nicht geeignet und etwas wie CURL wäre besser.

0

Dokumentation auf dem Rückgabewert von ShellExecute:

Wenn die Funktion erfolgreich, gibt sie einen Wert größer als 32. Wenn die Funktion fehlschlägt, es gibt einen Fehlerwert, der die Ursache des Fehlers anzeigt. Der Rückgabewert wird als HINSTANCE für die Abwärtskompatibilität mit 16-Bit-Windows-Anwendungen umgewandelt. Es ist jedoch keine wahre HINSICHT. Es kann nur zu einem int umgewandelt und mit 32 oder den folgenden Fehlercodes verglichen werden.

Siehe ShellExecute Dokumentation.

Und ja, CURL wäre besser.

+1

Aus Sicht von ShellExecute ist ein 404 kein Fehler. Es hat den Browser gestartet, und das hat eine Antwort bekommen. Es ist sogar die richtige Antwort für diese URL. – MSalters

3

oder wenn Sie nicht möchten, dass eine externe Bibliothek verwenden, können Sie direkt überprüfen mit Internetopen, InternetOpenURL usw.