मैं एक आत्म-सिखाया, शौकिया प्रोग्रामर हूं, और मैं इस मंच के लिए नया हूं। कृपया मेरा साथ दें।एक्सेल वीबीए एमएसएक्सएमएल 2.XMLHTTP.6.0 बनाम एमएसएक्सएमएल 2.ServerXMLHTTP.6.0
लगभग दो साल पहले, मैंने एक वेबसाइट में लॉगिन करने के लिए एक सरल एक्सेल वीबीए प्रोग्राम लिखा था और एक .csv फ़ाइल के रूप में ग्राहक विवरण प्राप्त किया था। मेरा कार्यक्रम जीईटी और पोस्ट अनुरोध का उपयोग करता है। इस कार्यक्रम ने लगभग तीन हफ्ते पहले पूरी तरह से (मेरी ज़रूरतों के लिए) काम किया, जब दुर्भाग्य से मुझे तोड़ दिया। कार्यक्रम प्रारंभिक जीईटी अनुरोध के माध्यम से नहीं मिल सका। विशेष रूप से, यह getReq.send लाइन पर टूट जाएगा।
मैं इस पोस्ट में आए: Login into website using MSXML2.XMLHTTP instead of InternetExplorer.Application with VBA
यहाँ, मुझे पता चला कि आप के बजाय "Msxml2.ServerXMLHTTP.6.0" के "Msxml2.XMLHTTP.6.0" का उपयोग कर सकते हैं। अनुरोध के बाद कुकीज़ को पार्स करने की आवश्यकता को समाप्त करने के बाद मैंने अपना कोड संशोधित किया, और यह काम किया! लेकिन मुझे नहीं पता। भले ही मुझे यह काम करने के लिए मिला, मुझे ऐसा नहीं लगता कि मैंने इस प्रक्रिया में बहुत कुछ सीखा है।
कुछ जानकारी गौर करने योग्य
- मेरे मूल कार्यक्रम मेरे काम कंप्यूटर (WindowsXP) पर तोड़ दिया।
- यह पता लगाना कि यह एक एक्सपी मुद्दा हो सकता है, और किसी भी नई मशीन के लिए बाजार में, मैंने विंडोज 7 चलाने वाले एक नए कंप्यूटर पर अपडेट किया। कार्यक्रम अभी भी काम नहीं करता है, हालांकि मुझे एक अलग त्रुटि संदेश मिला है।
- मैंने अपना कोड विंडोज 10 कंप्यूटर पर चलाया और यह ठीक काम किया।
- मैं विभिन्न अन्य वेबसाइटों से कनेक्ट करने के लिए समान कोड का उपयोग करता हूं और यह ऑपरेटिंग सिस्टम के बावजूद ठीक काम करता है।
तो, मेरे विशिष्ट प्रश्न:
- क्यों Msxml2.XMLHTTP.6.0 साथ कोड काम नहीं बल्कि Msxml2.ServerXMLHTTP.6.0 सकता है?
- और कोड पहले स्थान पर क्यों टूटा हो सकता है?
- कोड एक विशेष वेबसाइट पर क्यों काम करेगा, लेकिन कोई दूसरा नहीं?
किसी भी अंतर्दृष्टि की सराहना की जाएगी। मैंने अपना कोड संलग्न किया है (लॉगिन जानकारी X'd आउट के साथ)।
Sub RCGInquiry()
Dim postReq, getReq, cookies
Dim p0 As Integer, p1 As Integer, temp As String
Dim result As String, respHead As String
Set getReq = CreateObject("Msxml2.ServerXMLHTTP.6.0")
'Set getReq = CreateObject("Msxml2.XMLHTTP.6.0")
' Visit homepage so we can find the cookies
getReq.Open "GET", "https://www.rcginquiry.com/sfs/Entry", False
getReq.send
respHead = getReq.getAllResponseHeaders
Debug.Print respHead
' Need to parse the cookie from Respone Headers
cookies = ""
p0 = 1
Do While InStr(p0, respHead, "Set-Cookie:") > 0
p0 = InStr(p0, respHead, "Set-Cookie:") + 11
p1 = InStr(p0, respHead, Chr(10))
temp = Trim(Mid(respHead, p0, p1 - p0))
cookies = cookies & temp & "; "
Loop
cookies = Left(cookies, Len(cookies) - 2)
' Debug.Print cookies
' Login
Set postReq = CreateObject("Msxml2.ServerXMLHTTP.6.0")
'Set postReq = CreateObject("Msxml2.XMLHTTP.6.0")
postReq.Open "POST", "https://www.rcginquiry.com/sfs/Entry", False
postReq.setRequestHeader "Cookie", cookies
postReq.setRequestHeader "Content-type", "application/x-www-form-urlencoded" 'send appropriate Headers
postReq.send "Usrid=XXXX&Psswd=XXXX" ' send login info
'-------------------------------------------------------------------------------
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim FSO As Object
Dim myFile As Object
Dim path As String
Dim y As Integer
curDate = Format(Date, "mm_dd_yy")
' Download CSV
postReq.Open "POST", "https://www.rcginquiry.com/sfs/Downloads/tmp.csv?filetype=POS&format=MFA20&heading=true&allaccts=true&junk=tmp.csv", False
postReq.setRequestHeader "Cookie", cookies 'must resend cookies so it knows i am logged in
postReq.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
postReq.send "filetype=POS&format=MFA20&heading=true&allaccts=true&junk=temp.csv" 'url query parameters
' Writes responseText to a .csv file
Set FSO = CreateObject("Scripting.FileSystemObject")
Set myFile = FSO.createtextfile("C:\Users\Adam\Desktop\POSITION\" & curDate & ".csv", True)
myFile.write (postReq.responseText)
myFile.Close
Set FSO = Nothing
Set myFile = Nothing
End Sub
वे पूरी तरह से अलग-अलग ढेर का उपयोग करते हैं - [एमएस को यही कहना है] (https://support.microsoft.com/en-us/kb/290761)।मैं आधिकारिक रूप से बात नहीं कर सकता, लेकिन आईआईआर यह आपके प्रमाण पत्र को स्पष्ट पाठ में भेज देगा। – Comintern