XP के तहत Excel 2003 में WinHttpRequest का प्रयोग करें

वोट
0

मैं नीचे पोस्ट करते हैं और मेरी HTTP + JSON वेब सेवा के लिए अनुरोध प्राप्त करने के लिए कोड का उपयोग कर रहा हूँ। Windows XP और Excel 2003 के तहत परीक्षण करते हुए सब कुछ Win7 और एक्सेल 2013 के तहत पूरी तरह से चलाता है, प्राप्त ठीक काम किया (अनुरोध शरीर JSON ऑब्जेक्ट शामिल हैं), लेकिन पोस्ट नहीं किया था। JSON डेटा जो लाइन पर भेज दिया जाना चाहिए सही लग रहा है, लेकिन यह सर्वर साइड पर प्राप्त नहीं होता है, और ग्राहक कोड एक त्रुटि रिपोर्ट नहीं करता। दुर्भाग्य से मैं स्निफर्स स्थापित नहीं कर सकता क्या वास्तव में भेज रहा है देखने के लिए। एक MSXML2.ServerXMLHTTP वस्तु का उपयोग करने के कोड को संशोधित करने के बाद, यह ठीक काम करता है (ताकि समाधान हो जाएगा)। किसी को भी इस समस्या के साथ अनुभव है? मैं यह पता लगाने की कोशिश कर रहा हूँ क्यों यह WinHttpRequest साथ काम नहीं करता ...

'Copied from https://coderwall.com/p/pbxsyw/vba-web-requests
Private Function MakeWebRequest(Method As String, Url As String, PostData As String) As Boolean
    ' make sure to include the Microsoft WinHTTP Services in the project
    ' tools -> references -> Microsoft WinHTTP Services, version 5.1
    ' http://www.808.dk/?code-simplewinhttprequest
    ' http://msdn.microsoft.com/en-us/library/windows/desktop/aa384106(v=vs.85).aspx
    ' http://www.neilstuff.com/winhttp/

    On Error GoTo ErrorHandler:

    ' create the request object
    Set mobjWebReq = CreateObject(WinHttp.WinHttpRequest.5.1)

    ' set timeouts
    ' http://msdn.microsoft.com/en-us/library/windows/desktop/aa384061(v=vs.85).aspx
    ' SetTimeouts(resolveTimeout, ConnectTimeout, SendTimeout, ReceiveTimeout)
    mobjWebReq.SetTimeouts 60000, 60000, 60000, 60000

    If Not LastUsedUrlMonitor Is Nothing Then
        LastUsedUrlMonitor.Value2 = Url
    End If

    ' make the request, http verb (method), url, false to force syncronous
    ' open(http method, absolute uri to request, async (true: async, false: sync)
    mobjWebReq.Open Method, Url, False

    ' handle post content type
    If Method = POST Then
        mobjWebReq.SetRequestHeader Content-type, _
          application/json
        If Not LastHttpBodySendMonitor Is Nothing Then
            LastHttpBodySendMonitor.Value2 = PostData
        End If
    End If

    ' set WinHttpRequestOption enumerations
    ' http://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx

    ' set ssl ignore errors
    '   13056: ignore errors
    '   0: break on errors
    mobjWebReq.Option(4) = 13056

    ' set redirects
    mobjWebReq.Option(6) = True

    ' allow http to redirect to https
    mobjWebReq.Option(12) = True

    ' send request
    ' send post data, should be blank for a get request
    mobjWebReq.Send PostData

    MakeWebRequest = True

    If Not LastHttpBodyReceivedMonitor Is Nothing Then
        LastHttpBodyReceivedMonitor.Value2 = mobjWebReq.Status & :  & mobjWebReq.StatusText & , Body:  & mobjWebReq.ResponseText
    End If

    Exit Function

ErrorHandler:
    Select Case Err.Number
        Case &H80072EFD
            MsgBox Connection to URL:  & Chr(13) & Url & Chr(13) & failed:  & Err.Description
        Case Else
            MsgBox Err.Number & Chr(13) & Err.Description
    End Select
    Err.Clear
    'Set mobjWebReq = Nothing
    MakeWebRequest = False
    Exit Function
End Function
03/10/2016 को 06:39
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

उत्तर एक्सल के लिए धन्यवाद। मैं तो बस समस्या हल हो जाती (मेरे बाल बाहर खींच के बाद)। जाहिरा तौर पर यह काम करता है Excel 2003 में होने की उम्मीद के रूप में:

mobjWebReq.Send (PostData)

और यह नहीं है (जबकि यह करता है एक्सेल 2013 में काम)

mobjWebReq.Send PostData

ऐसा लगता है कि POSTDATA सिर्फ दूसरे मामले में नजरअंदाज कर दिया है, और इस मुद्दे को ऑब्जेक्ट प्रकार से संबंधित नहीं था। संयोग से जब मैं ServerXMLHTTP वस्तु का इस्तेमाल किया मैं भी कोष्ठक का इस्तेमाल किया।

04/10/2016 को 08:04
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more