2012-07-20 14 views
14

के साथ VBA ServerXMLHTTP https अनुरोध मैं एक्सेल 2007 vba स्क्रिप्ट पर कुछ http अनुरोध करने के लिए एक सर्वरXMLHTTP ऑब्जेक्ट का उपयोग कर रहा हूं।स्वयं हस्ताक्षरित प्रमाणपत्र

लेकिन मुझे एक https सर्वर से कनेक्ट करने की आवश्यकता है जो एक स्व-हस्ताक्षरित SSL प्रमाणपत्र का उपयोग करता है, इसलिए डिफ़ॉल्ट रूप से मुझे संदेश मिलता है "प्रमाणपत्र प्राधिकरण अमान्य या गलत है"। क्या सर्वरएक्सएमएलएचटीपी ऑब्जेक्ट को कॉन्फ़िगर करने का कोई तरीका है ताकि उसे सीए प्रमाणपत्र की आवश्यकता न हो?

कुछ नमूना कोड इस प्रकार है:

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 Method और getOption 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

ठंडा! बस! आपने इसे अर्जित किया है :) (स्टैक ओवरफ्लो मुझे बताता है कि मुझे बक्षीस देने के लिए 11 घंटे का इंतजार करना होगा, मैं इन दिनों शहर से बाहर रहूंगा, इसलिए कृपया धैर्य रखें अगर मैं आपको इनाम देने के लिए कनेक्ट नहीं कर सकता, तो मैं करूँगा एक बार मैं वापस आ गया :) –

+2

धन्यवाद! वीबीए के साथ एक्सएमएलएचटीटीपी इतनी बुरी तरह से प्रलेखित है कि कभी-कभी आपको उम्मीद है कि किसी को कभी-कभी एक ही समस्या हो सकती है। मैं खुशी से मदद कर सकता है! :) – Romain

+2

SetOption बहुत मददगार था, बस मुझे जो चाहिए था। SetOption प्रभावी होने से पहले मुझे अपने सिस्टम पर "MSXML2.ServerXMLHTTP.3.0" का उपयोग करना पड़ा। – Alan

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।कॉम/ए/14908329/1534346) @ हेलेन – Romain

+0

द्वारा बस 'सेटऑप्शन' पर ब्रांड्स को हटाएं जैसे कि 'objHTTP.SetOption 2, objHTTP.GetOption (2) और SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS' – wqw

संबंधित मुद्दे