2009-02-15 5 views
7

Написал небольшое приложение, которое обращается к кучу поисковых сайтов и помещает результаты в документ Word, который запускается несколько сотен раз в день.Проверка активного подключения к Интернету

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

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

Однако наш интернет-офис нашего офиса ненадежен, и он был на последней половине дня. Это означает, что около 400 плохих поисков были сохранены в локальных папках и вставлены в итоговые документы.

Когда человек искал, они могли узнать, был ли интернет сломан, и они будут выполнять свои поисковые запросы позже. Очевидно, однако, что это приложение не может сказать, и потому, что я не использую API или что-то еще, и потому что я ограничен использованием VBA-среды (мне даже не разрешены инструменты MZ), мне нужно найти способ убедитесь, что Интернет работает до продолжения потока программы, не полагаясь на слишком много ссылок, и, желательно, без экранирования для фразы «404 Страница не найдена».

Я не очень хорошо знаком с VB, и VBA разрушает меня многими способами, поэтому, возможно, есть простой способ сделать это, поэтому я спрашиваю здесь.

Цените любую помощь.

ответ

6

Вы можете использовать MSXML библиотеку & использовать класс XMLHttpRequest для проверки вещей

например

On Error Resume Next 
Dim request As MSXML2.XMLHTTP60 
request.Open "http://www.google.com" 
request.Send 
Msgbox request.Status 

Статус предоставит вам код состояния HTTP, что произошло с запросом. Возможно, вам придется выполнить несколько проверок в зависимости от вашего сценария.

Надеюсь, что это поможет.

+1

Я не уверен, как OP получает результаты поиска в Word, но он должен использовать этот метод и request.responseText. –

+1

Необходимо определить параметр Open Method перед URL-адресом –

+0

dkusleika - я немного почитал об этом и имел игру, но не успел узнать о разборе/манипулировании XML. Вместо этого приложение использует документы. Это ужасно, но это пошло от предложения, которое было распространено во второй половине дня, и на нем нет моего имени. Я не программист, к сожалению :) – user51498

2

К сожалению, это немного сложный вопрос, чтобы ответить на несколько причин:

  1. Как вы определяете подключение к неработоспособности интернет? Вы проверяете действительный IP-адрес? Вы звонили? Откуда вы знаете, что у вас есть разрешения на проверку этих вещей? Откуда вы знаете, что брандмауэр/антивирус компьютера не вызывает неудобного поведения?
  2. Как только вы установили, что соединение работает, что вы делаете, если соединение падает в середине операции?

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

21

Очевидно, что ваша проблема имеет много уровней. Вы должны начать с определения «подключенного к Интернету» и продолжить разработку резервных стратегий, которые включают не записывание недопустимых файлов при сбое.

Что касается «я связан» вопрос, вы можете попробовать выстукивать в Win32 API:

Private Declare Function InternetGetConnectedState Lib "wininet.dll" _ 
(ByRef dwflags As Long, ByVal dwReserved As Long) As Long 

Public Function GetInternetConnectedState() As Boolean 
    GetInternetConnectedState = InternetGetConnectedState(0&,0&) 
End Function 

Хотя (ограничения прокси/NAT/брандмауэр и т.д.) в зависимости от настроек сети, Windows, возможно, придется другое мнение об этом, чем вы.

Попытка получить страницы, которые вас интересуют, проверка статуса возврата в заголовках HTTP (тайм-аут шлюза, 404, что бы вы ни ожидали, когда оно «не работает») также может быть способом.

+0

я получаю смешное исключение это при подключении через VPN, но не на самом деле онлайн. Удивление, если это можно каким-то образом укрепить, но в целом это простое и простое решение. – seegoon

2

Основываясь на ответе shakalpesh и комментариях к нему, есть (по крайней мере) два способа получить веб-страницу в Word без разбора XML, возвращаемого объектом XMLHTTP60.

(NB код состояния HTTP 200 указывает на то, что «запрос удалось» - см here)

  • написать XMLHTTP60.ResponseText в текстовый файл, а затем вызвать Documents.Open в этот текстовый файл
If (xhr.Status = 200) Then 
    hOutFile = FreeFile 
    Open "C:\foo.html" For Output As #hOutFile 
    Print #hOutFile, xhr.responseText 
    Close #hOutFile 
End If 

// ... 

Documents.Open "C:\foo.html" 

Это имеет тот недостаток, что некоторые связанные элементы могут быть потеряны, и вы будете получить сообщение, когда файл открывается

  • проверки статуса URL с объектом XMLHTTP60, а затем использовать Documents.Open, чтобы открыть URL, как и раньше:
If (xhr.Status = 200) Then 
    Documents.Open "http://foo.bar.com/index.html" 
End If 

Существует небольшая вероятность того, что запрос XMLHTTP60 может быть успешным, и Documents.Open сбой (или наоборот). Надеемся, что это должно быть довольно необычным событием, хотя

3

Используйте следующий код для проверки подключения к Интернету первый anable XML v6.0 в ваших ссылках

Function checkInternetConnection() As Integer 
'code to check for internet connection 
'by Daniel Isoje 
On Error Resume Next 
checkInternetConnection = False 
Dim objSvrHTTP As ServerXMLHTTP 
Dim varProjectID, varCatID, strT As String 
Set objSvrHTTP = New ServerXMLHTTP 
objSvrHTTP.Open "GET", "http://www.google.com" 
objSvrHTTP.setRequestHeader "Accept", "application/xml" 
objSvrHTTP.setRequestHeader "Content-Type", "application/xml" 
objSvrHTTP.Send strT 
If err = 0 Then 
checkInternetConnection = True 
Else 
    MsgBox "Internet connection not estableshed: " & err.Description & "", 64, "Additt !" 
End If 
End Function 
Смежные вопросы