Существует ли более быстрый способ проверить, существует ли внешняя веб-страница?

PDFCreator имеет COM-компонент, вызываемый от.NET или VBScript (образцы, включенные в загрузку).

, Но, мне кажется, что принтер, в чем Вы нуждаетесь - просто смешивают это с автоматизация Word , и необходимо быть хороши пойти.

14
задан John Saunders 1 January 2014 в 12:36
поделиться

4 ответа

Я думаю, что ваш подход довольно хорош, но он изменил бы его на загрузку только заголовков, добавив w.Method = WebRequestMethods.Http.Head; перед вызовом GetResponse .

Это может сделать:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.example.com");
request.Method = WebRequestMethods.Http.Head;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
bool pageExists = response.StatusCode == HttpStatusCode.OK;

Возможно, вы захотите проверить и другие коды состояния.

39
ответ дан 1 December 2019 в 07:12
поделиться

Очевидное ускорение - параллельное выполнение нескольких запросов - большая часть времени будет потрачена на ввод-вывод, поэтому создание 10 потоков для каждой проверки страницы завершит всю итерацию примерно в 10 раз быстрее.

0
ответ дан 1 December 2019 в 07:12
поделиться
static bool GetCheck(string address)
{
    try
    {
        HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
        request.Method = "GET";
        request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
        var response = request.GetResponse();
        return (response.Headers.Count > 0);
    }
    catch
    {
        return false;
    }
}
static bool HeadCheck(string address)
{
    try
    {
        HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
        request.Method = "HEAD";
        request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
        var response = request.GetResponse();
        return (response.Headers.Count > 0);
    }
    catch
    {
        return false;
    }
}

Остерегайтесь, некоторые страницы (например, файлы WCF .svc) могут не возвращать ничего из запроса заголовка. Я знаю, потому что сейчас работаю над этим.
РЕДАКТИРОВАТЬ - Я знаю, что есть более эффективные способы проверить возвращаемые данные, чем подсчет заголовков, но это копирование / вставка из материалов, где это важно для нас.

1
ответ дан 1 December 2019 в 07:12
поделиться
  1. Вы можете сделать это асинхронным способом, потому что теперь вы ждете результатов после каждого запроса. Для нескольких страниц вы можете просто добавить свою функцию в ThreadPool и дождаться завершения всех запросов. Для большего количества запросов вы можете использовать асинхронные методы для ResponseStream () (BeginRead и т. Д.).
  2. Еще одна вещь, которая может вам помочь (помочь мне наверняка), - это очистить свойство .Proxy :
w.Proxy = null;

Без этого хотя бы 1-й запрос будет намного медленнее, по крайней мере, на моей машине.
3. Вы не можете загружать всю страницу, а загружать только заголовок, установив .Method на "HEAD".

0
ответ дан 1 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: