Проверка ссылок с ShellExecute? - PullRequest
0 голосов
/ 15 июля 2009

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 15 июля 2009

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

3 голосов
/ 15 июля 2009

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

0 голосов
/ 15 июля 2009

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

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

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

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

...