最近遇到在MS Excel中建立的Web Query在創建完成后過了一段時間(或關閉文件后再次打開文件并刷新數據)出現無法刷新的問題,點擊刷新時報錯如下:
無法下載您要求的信息。
這是一個很不友好的報錯,從提示的信息來看,似乎是這個網站無法打開,然而在瀏覽器里打開卻沒有任何問題(采用的是匿名用戶的身份驗證)。
剛為了獲得更多的錯誤信息,我查看了系統的事件日志,發現了這么一條記錄:
Object reference not set to an instance of an object. at xxx.Global.session_Start(Object sender, EventArgs e) at System.Web.SessionState.SessionStateModule.RaiSEOnStart(EventArgs e) at...
看來是在訪問這個網頁的時候拋出了未處理的異常,于是我去查了網站的Global.asax.cs文件,果然在Session_Start方法中的確有訪問對象
Request.Headers["Accept-Language"]的代碼,因為Session會存在一段時間,所以Session_Start方法沒有在剛建立完查詢后刷新時就被調用,于是我在此方法中加了判斷對象是否為空的代碼后問題解決了。
總結:由此可見,使用Office從網站中提取數據時,如果訪問的網頁存在服務器端的異常,則會出現這類無法下載的報錯,而不會顯示異常的詳細信息,需要到服務器端的事件日志中查看。在Office中建立查詢的時候,訪問網站跟打開瀏覽器訪問網站是一樣的效果,因此出現的行為和表現一致。而在建立完查詢后,刷新網站獲取數據時,相比瀏覽器,有些功能是被精簡掉了,比如Headers["Accept-Language"]等在刷新網站數據時發送的Request請求中是不存在的,通過網絡抓包軟件Fiddler分析:
瀏覽器訪問網站時的請求頭信息:
Office軟件通過Web Query訪問網站時的請求頭信息:
??磥硪院蠼╓eb Query時需要注意,也希望此文對遇到同樣問題的小伙伴有幫助和指導意義,同時歡迎高手提出意見和補充。
新聞熱點
疑難解答