2009-07-15 4 views
0

Мне поручено проходить через базу данных и проверять все ссылки по недельному графику. Я обычно работаю на PHP, но делать это в PHP будет очень медленно (на самом деле это будет время ожидания страницы после примерно 100 URL-адресов), поэтому я решил сделать быстрое приложение на C++.Link Checker С ShellExecute?

Уверенно, я не использовал C++ с колледжа, поэтому я немного ржавый.

Я нашел функцию ShellExecute и что она не откроет страницу без проблем. Вот то, что я до сих пор:

#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; 
} 

Проблема заключается в том, что она всегда возвращает истину, будь то открытие действительную страницу или нет. Кажется, проверяет, может ли связанное приложение (браузер в этом случае) открыть документ без проблем, а затем возвращает true. Он не хочет видеть, получает ли браузер 404 или нет, он просто видит, что он открыт и работает, и все в порядке.

Есть ли лучший способ сделать это? Я пропустил шаг?

Как в стороне, я попытался использовать материал cURLcpp, но не могу понять, как это понять. Все примеры указывают на файлы заголовков, которых нет в загрузке. У меня есть чувство, что cURLcpp является лучше способ сделать это.

Спасибо за любую помощь.

+0

ShellExecute, даже если вы получите его на работу, также будет невероятно медленно. cURL - это путь. Попробуйте еще раз, и задайте вопрос, если вы застряли. – ravenspoint

ответ

3

Я думаю, вы ответили на свой вопрос. ShellExecute действительно не подходит для этой задачи, и что-то вроде CURL было бы лучше.

0

Документация по возвращаемому значению ShellExecute:

Если функция завершается успешно, она возвращает значение больше, чем 32. Если функция завершается ошибкой, она возвращает значение ошибки, который указывает причину сбоя. Возвращаемое значение отображается как HINSTANCE для обратной совместимости с 16-разрядными приложениями Windows. Однако это не правда, HINSTANCE. Его можно отличить только от int и сравнить с 32 или следующими кодами ошибок ниже.

См. ShellExecute документация.

И да, CURL будет лучше.

+1

С точки зрения ShellExecute значение 404 не является ошибкой. Он запустил браузер и получил ответ. Это даже правильный ответ на этот URL. – MSalters

3

или если вы не хотите использовать внешнюю библиотеку можно проверить непосредственно InternetOpen, InternetOpenURL и т.д.