2016-12-07 9 views
5

मैं एक आत्म-सिखाया, शौकिया प्रोग्रामर हूं, और मैं इस मंच के लिए नया हूं। कृपया मेरा साथ दें।एक्सेल वीबीए एमएसएक्सएमएल 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 कंप्यूटर पर चलाया और यह ठीक काम किया।
  • मैं विभिन्न अन्य वेबसाइटों से कनेक्ट करने के लिए समान कोड का उपयोग करता हूं और यह ऑपरेटिंग सिस्टम के बावजूद ठीक काम करता है।

तो, मेरे विशिष्ट प्रश्न:

  1. क्यों Msxml2.XMLHTTP.6.0 साथ कोड काम नहीं बल्कि Msxml2.ServerXMLHTTP.6.0 सकता है?
  2. और कोड पहले स्थान पर क्यों टूटा हो सकता है?
  3. कोड एक विशेष वेबसाइट पर क्यों काम करेगा, लेकिन कोई दूसरा नहीं?

किसी भी अंतर्दृष्टि की सराहना की जाएगी। मैंने अपना कोड संलग्न किया है (लॉगिन जानकारी 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 
+1

वे पूरी तरह से अलग-अलग ढेर का उपयोग करते हैं - [एमएस को यही कहना है] (https://support.microsoft.com/en-us/kb/290761)।मैं आधिकारिक रूप से बात नहीं कर सकता, लेकिन आईआईआर यह आपके प्रमाण पत्र को स्पष्ट पाठ में भेज देगा। – Comintern

उत्तर

0

वीबीए और स्टैक ओवरव्लो में आपका स्वागत है। आपके नोट्स पूरी तरह से हैं और इसलिए एकमात्र चीज जो मैं सुझा सकता हूं वह यह है कि आप अपनी प्रॉक्सी सेटिंग्स जांचते हैं।

https://support.microsoft.com/en-us/help/289481/you-may-need-to-run-the-proxycfg-tool-for-serverxmlhttp-to-work

वह लिंक इस लिंक

https://support.microsoft.com/en-us/help/290761/frequently-asked-questions-about-serverxmlhttp

जो आप ComIntern

0

यह blog post से संबोधित किया जाता रहे थे कहना है कि ServerXLMHTTP ग्राहक पर एक प्रॉक्सी के माध्यम से काम नहीं करेगा में दफनाया गया था , लेकिन एक्सएमएलएचटीपीपी होगा। एक्सेल वीबीए में मैं ServerXLMHTTP.6.0 का उपयोग कर रहा था, और यह कॉर्पोरेट नेटवर्क के अंदर कुछ ग्राहकों के लिए असफल रहा, जबकि XMLHTTP ने काम किया।

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