मैं भी इस समस्या में चल रहा हूं। ऐसा लगता है कि WinHttp.WinHttpRequest
COM इंटरफ़ेस तक सीमित है। इसे हल करने के लिए कुछ अलग-अलग विकल्प हैं।
कुछ खुदाई के बाद, मुझे माइक्रोसॉफ्ट कर्मचारी से this post मिला। यह एक स्पष्ट स्पष्टीकरण देता है और एक बाइनरी सरणी में भेजने की सिफारिश करता है।
आप WinHttpRequest वस्तु का उपयोग कर एक स्ट्रिंग पोस्ट कर रहे हैं, तो आप ओवरराइड यह कैसे संचरण के लिए स्ट्रिंग को कूटबद्ध नहीं कर सकता। WinHttpRequest ऑब्जेक्ट हमेशा यूनिकोड स्ट्रिंग को यूटीएफ -8 में परिवर्तित करेगा।
हालांकि, ध्यान दें कि एक यूनिकोड स्ट्रिंग है कि केवल 7 बिट लैटिन -1/ISO-8859-1 वर्ण जब के रूप में UTF-8 ;-) ऐसे मामलों में इनकोडिंग यथावत रहेगा, WinHttpRequest वस्तु नहीं है अपने सामग्री-प्रकार शीर्षलेख में "वर्णसेट = यूटीएफ -8" विशेषता जोड़ें। (और मैं सोच सकता है कि सर्वर ग्रहण करेंगे कि पोस्ट डेटा ISO-8859-1 है।)
तो, अगर एक्सएमएल पाठ डेटा है कि आप पोस्ट कर रहे हैं लैटिन -1 अक्षरांकीय या विराम वर्ण कोड हैं (प्रत्येक
WinHttpReq.SetRequestHeader "Content-Type", "application/xml;Charset=ISO-8859-1"
हालांकि, अगर आपकी पोस्ट डेटा 8 में शामिल है: दशमलव 128) की तुलना में कम है, तो सब आप क्या करना है, यह निर्दिष्ट "ISO-8859-1" अपने सामग्री प्रकार में शब्दसमुच्चय शीर्षक है -बीबी अक्षरों, तो आप डेटा को भेजें विधि के लिए एक स्ट्रिंग के रूप में आपूर्ति नहीं कर सकते हैं। यूटीएफ -8 रूपांतरण से बचने के लिए, आपके एप्लिकेशन को स्ट्रिंग को बाइट सरणी में परिवर्तित करना होगा, और इसके बजाय आपूर्ति करना होगा। WinHttpRequest ऑब्जेक्ट किसी बाइट सरणी पर किसी भी डेटा रूपांतरण का प्रयास नहीं करेगा।
सादर,
स्टीफन Sulzer
माइक्रोसॉफ्ट कार्पोरेशन
एक दूसरा विकल्प, एक द्विआधारी सरणी में भेजने की तुलना में अन्य, Msxml2.XMLHTTP
या Msxml2.ServerXMLHTTP
करने के लिए स्विच करने के लिए है। इन मंगल में से कोई भी Content-Type
शीर्षलेख नहीं है।सौभाग्य से, जब WinHttp.WinHttpRequest
बनाया गया था, तो माइक्रोसॉफ्ट ने जानबूझकर इंटरफेस के लिए टेम्पलेट के रूप में Msxml2.XMLHTTP
का उपयोग किया। तो, कोड को बदलने के लिए यह काफी छोटा है।
इसके अलावा, Msxml2.ServerXMLHTTP
COM इंटरफ़ेस uses WinHTTP internally। इसलिए, जब आप WinHttp.WinHttpRequest
के लिए विशिष्ट सुविधाओं तक पहुंच खो रहे हैं, तो दोनों एक ही बैकएंड का उपयोग करते हैं।
तीसरा विकल्प ADODB.Stream
का उपयोग करना है। यह आपको IStream
के साथ काम करने की अनुमति देता है, जो ऐसा कुछ नहीं है जिसे आप आमतौर पर वीबीए से कर सकते हैं। नीचे नमूना कोड "How to create BinaryArray in VbScript?" पर उत्तर के आधार पर आधारित है।
' Create a Binary Stream
Set objStreamBinary = CreateObject("ADODB.Stream")
objStreamBinary.Type = 1
objStreamBinary.Open
' Create a Text Stream
Set objStreamText = CreateObject("ADODB.Stream")
objStreamText.Type = 2
objStreamText.Open
' Copy the POST data to the Text Stream
objStreamText.WriteText strRequest
objStreamText.Position = 2
' Copy the Text Stream Contents to the Binary Stream
objStreamText.CopyTo objStreamBinary
objStreamText.Close
' Read the contents of the Binary Stream
' and send it to the WinHttpRequest object
web_Http.Send objStreamBinary.Read(-1)
वे किस क्रिससेट की अपेक्षा कर रहे हैं? क्या आपने इसे अपनी 'सामग्री-प्रकार' स्ट्रिंग में निर्दिष्ट करने का प्रयास किया है? –
सामग्री-प्रकार किसी भी चीज़ के बिना केवल एप्लिकेशन/जेसन होना चाहिए, यदि सामग्री-प्रकार में एप्लिकेशन/जेसन से परे कुछ भी है तो मुझे कोई त्रुटि मिलती है। हां मैंने सामग्री-प्रकार स्ट्रिंग निर्दिष्ट करने का प्रयास किया। यह अनुरोध सेटअप करने के बाद होता है। –
अर्धविराम के साथ अपनी स्ट्रिंग को समाप्त करने का प्रयास करें। कोइ भाग्य? –