2009-02-15 177 views
7

寫了一個小應用程序,訪問一堆搜索網站,並將結果放在一個word文檔中,每天運行幾百次。檢查有效的互聯網連接

它將單個搜索結果保存在多個本地文件夾中,所以下次搜索這些單詞時,它會在本地抓取它們,而不是再次加載網站。

這工作正常 - 即使它不快。人們對此印象深刻,因爲直到幾個星期前,他們通過逐字地加載六個不同的搜索網站來進行手動搜索,然後將搜索結果複製並粘貼到word文檔中。

但是,我們的辦公室的互聯網是不可靠的,並在最後半天下降。這意味着大約400個錯誤搜索已保存在本地文件夾中,並被插入到最終文檔中。

當一個人在搜索時,他們可以分辨互聯網是否壞掉,他們會在晚些時候進行搜索。顯然,這個應用程序不能告訴,因爲我沒有使用API​​或任何東西,並且由於我僅限於使用VBA環境(我甚至沒有允許MZ工具),所以我需要找到一些方法在繼續執行程序流程之前檢查互聯網是否正常工作,而不要依賴太多的參考文獻,並且最好不要使用短語「404 Page Not Found」的屏幕抓圖。

我對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。 – 2009-02-15 21:53:51

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

我得到一個有趣的例外實際上不在線。想知道它是否可以以某種方式得到支持,但總而言之,這是一個偉大而簡單的解決方案。 – seegoon 2012-12-24 16:18:11

2

基於shakalpesh的回答及其評論,至少有兩種方法可以將網頁轉換爲Word,而無需解析XMLHTTP60對象返回的XML。

(NB的200 HTTP狀態代碼表示「請求成功」 - 見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" 

這有一些鏈接的元素可能會丟失的缺點,你會得到一個消息框,當文件打開

  • 查詢的網址狀態與XMLHTTP60對象,然後使用Documents.Open打開URL像以前一樣:
If (xhr.Status = 200) Then 
    Documents.Open "http://foo.bar.com/index.html" 
End If 

有輕微XMLHTTP60請求可能會成功,並且Documents.Open一個失敗(反之亦然)。但願這應該是一個相當罕見的事件,雖然

3

使用下面的代碼時,通過VPN連接,但檢查互聯網連接 第一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