2012-07-20 178 views
14

我正在使用ServerXMLHTTP對象在Excel 2007 vba腳本上創建一些http請求。帶有自簽名證書的VBA ServerXMLHTTP https請求

但我需要連接到使用自簽名SSL證書的https服務器,因此默認情況下我會收到消息「證書頒發機構無效或不正確」。有沒有辦法配置ServerXMLHTTP對象,以便它不需要CA證書?

一些示例代碼如下:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
    objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password" 
    objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
    objHTTP.send ("") 

回答

23

我曾經有過這個問題有一段時間,我只設法過去,感謝這個:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS) 
objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password" 
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
objHTTP.send ("") 

我發現這個在這裏setOption MethodgetOption Method

在這裏代碼我剛剛使用SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS,但你可以嘗試與其他更具體的:

  • SXH_SERVER_CERT_IGNORE_WRONG_USAGE
  • SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID
  • SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID
  • SXH_SERVER_CERT_IGNORE_UNKNOWN_CA
+0

cool!而已!你已經贏了:)(stackoverflow告訴我,我必須等待11個小時才能獲得賞金,這些日子我會離開這個城市,所以如果我無法連接獎勵你,請耐心等待,我會做的一旦我回來:) – 2012-07-22 17:22:15

+2

謝謝!帶有VBA的XMLHTTP是如此嚴重的文檔記錄,有時您只需要希望某人有時會遇到同樣的問題。很高興我能幫上忙! :) – Romain 2012-07-23 17:51:05

+2

SetOption是非常有用的,正是我所需要的。在我的系統上,我必須在SetOption生效之前使用「MSXML2.ServerXMLHTTP.3.0」。 – Alan 2012-10-25 18:28:12

4
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS) 
objHTTP.Open "POST", "https://invernalia.homelinux.net", False, "user", "password" 
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
objHTTP.send ("") 

得到上述溶液對於小的修改工作。相反的:

objHTTP.SetOption(2, objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS) 

我用:

objHTTP.SetOption(2) = (objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS) 

否則我得到的錯誤:

微軟VBScript編譯錯誤 '800a0414' 調用子objHTTP時不能使用括號 。 SetOption(2,objHTTP.GetOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS)

參考: SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS

+0

對於錯誤「800a0414」,請參閱此[答案](http:// stackoverflow。com/a/14908329/1534346)by @Helen – Romain 2015-01-03 09:42:14

+0

只需刪除'SetOption'上的圓括號就像這樣'objHTTP.SetOption 2,objHTTP.GetOption(2)和Not SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS' – wqw 2015-10-22 12:56:29