2008-10-15 6 views
33

पर HTTP प्राप्त करें क्या Visual Basic स्क्रिप्ट के भीतर HTTP GET अनुरोध करने का कोई तरीका है? मुझे प्रसंस्करण के लिए किसी विशेष यूआरएल से प्रतिक्रिया की सामग्री प्राप्त करने की आवश्यकता है।एचबीएस

उत्तर

55
Dim o 
Set o = CreateObject("MSXML2.XMLHTTP") 
o.open "GET", "http://www.example.com", False 
o.send 
' o.responseText now holds the response as a string. 
+0

बस तीसरा बूल पैरामीटर जोड़ने के लिए यह दर्शाता है कि कॉल को एसिंक या सिंक किया जाना है या नहीं। झूठा मूल्य का मतलब है कि यह एक तुल्यकालिक कॉल होगा। इसके अलावा ओपन एपीआई में उपयोगकर्ता आईडी और पासवर्ड को पास करने के लिए प्रमाणीकरण के लिए दो और पैरामीटर हैं, यदि इसे वेबसाइट द्वारा कॉल किया जाना आवश्यक है। – RBT

+1

मुझे विंडोज 2012 से इस विधि का उपयोग करने में समस्याएं आ रही हैं, मुझे लगता है कि यह माइक्रोसॉफ्ट द्वारा जारी किए गए विभिन्न संस्करणों के कारण है। मैं एक HTTP बनाने के लिए antoher विधि का उपयोग करने के बारे में सोच रहा हूँ, किसी भी विचार ?? –

+0

एक साधारण प्रश्न के लिए सरल उदाहरण। मुझे यह खोजने में 2 घंटे लग गए, जो मुझे चाहिए। वाहवाही! – JediPotPie

35

आपके पास यह लिखने के समय नहीं है कि आप प्रतिक्रिया के साथ क्या करने जा रहे हैं या इसकी सामग्री का प्रकार क्या है। एक उत्तर में पहले से ही MSXML2.XMLHTTP का एक बहुत ही बुनियादी उपयोग शामिल है (मैं अधिक स्पष्ट MSXML2.XMLHTTP.3.0 प्रोगिड की अनुशंसा करता हूं) हालांकि आपको प्रतिक्रिया के साथ अलग-अलग चीजें करने की आवश्यकता हो सकती है, यह टेक्स्ट नहीं हो सकता है।

XMLHTTP भी एक responseBody संपत्ति प्रतिक्रिया का एक बाइट सरणी संस्करण है और वहाँ एक responseStream जो प्रतिक्रिया के लिए एक IStream आवरण है जो है।

ध्यान दें कि एक सर्वर साइड आवश्यकता में (जैसे, VBScript एएसपी में आयोजित) आप MSXML.ServerXMLHTTP.3.0 या WinHttp.WinHttpRequest.5.1 (जो एक के पास समान इंटरफ़ेस है) का प्रयोग करेंगे।

यहाँ XMLHTTP का उपयोग कर एक पीडीएफ फाइल लाने और इसे स्टोर करने के लिए का एक उदाहरण है: -

Dim oXMLHTTP 
Dim oStream 

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0") 

oXMLHTTP.Open "GET", "http://someserver/folder/file.pdf", False 
oXMLHTTP.Send 

If oXMLHTTP.Status = 200 Then 
    Set oStream = CreateObject("ADODB.Stream") 
    oStream.Open 
    oStream.Type = 1 
    oStream.Write oXMLHTTP.responseBody 
    oStream.SaveToFile "c:\somefolder\file.pdf" 
    oStream.Close 
End If 
+0

अरे एंथनी! हम ऑथ कुंजी निर्दिष्ट करेंगे या तर्कों को बाहरी रूप से कैसे अनुरोध करेंगे? या हम केवल यूआरएल का एक हिस्सा रख सकते हैं। –

+0

@ सुशांतखुराना: यह निर्भर करेगा कि सर्वर क्या अपेक्षा कर रहा है। आप addHeader विधि के अनुरोध में अतिरिक्त शीर्षलेख शामिल करते हैं, इसलिए यदि आपके पास दोनों सिरों का नियंत्रण है तो आप कुछ कस्टम "x-myheader" हेडर बनाते हैं। या आप "POST" का उपयोग कर सकते हैं, "एप्लिकेशन/एक्स-www-form-urlencoded" जैसे सामग्री-प्रकार शीर्षलेख जोड़ें और 'send' विधि में urlencoded स्ट्रिंग contianing पैरामीटर पास करें। या जैसा कि आप कहते हैं क्वेरी क्वेरी में मान शामिल हैं। यह वास्तव में सर्वर पर आपके लिए उपलब्ध है पर निर्भर करता है। – AnthonyWJones

+0

हां। मुझे केवल मूल HTTP प्राधिकरण शीर्षलेख के माध्यम से ऐसा करना है। उदाहरण प्रमाणीकरण: मूल QWxhZGRpbjpvcGVuIHNlc2FtZQ == –

3

आप GET अनुरोध उपयोग कर रहे हैं वास्तव में डेटा भेजने के लिए ...

जांच: http://techhelplist.com/index.php/tech-tutorials/37-windows-troubles/60-vbscript-sending-get-request

MSXML2.XMLHTTP के साथ समस्या यह है कि विंडोज़ संस्करण और पैच के आधार पर अलग-अलग नामों के साथ इसके कई संस्करण हैं।

यह बताते हैं: http://support.microsoft.com/kb/269238

मैं VBScript का उपयोग कर

set ID = CreateObject("InternetExplorer.Application") 
IE.visible = 0 
IE.navigate "http://example.com/parser.php?key=" & value & "key2=" & value2 
do while IE.Busy.... 

कॉल करने के लिए और अधिक भाग्य पड़ा है .... और अधिक सामान लेकिन सिर्फ अनुरोध के माध्यम से जाने देना।

+0

यह सिर्फ बदसूरत और अक्षम है, आप ऐसा क्यों करेंगे? हर बार जब आप इस कोड को कॉल करते हैं तो आप पृष्ठभूमि में 'iexplore.exe' का एक उदाहरण बना रहे हैं, जो HTTP अनुरोध को संभालने के लिए winsock.dll को कॉल करता है, जहां सर्वर HTTP अनुरोध ऑब्जेक्ट्स इसे सीधे कम ओवरहेड के साथ करता है। – Lankymart

-1
 strRequest = "<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"" " &_ 
     "xmlns:tem=""http://tempuri.org/"">" &_ 
     "<soap:Header/>" &_ 
     "<soap:Body>" &_ 
      "<tem:Authorization>" &_ 
       "<tem:strCC>"&1234123412341234&"</tem:strCC>" &_ 
       "<tem:strEXPMNTH>"&11&"</tem:strEXPMNTH>" &_ 
       "<tem:CVV2>"&123&"</tem:CVV2>" &_ 
       "<tem:strYR>"&23&"</tem:strYR>" &_ 
       "<tem:dblAmount>"&1235&"</tem:dblAmount>" &_ 
      "</tem:Authorization>" &_ 
     "</soap:Body>" &_ 
     "</soap:Envelope>" 

     EndPointLink = "http://www.trainingrite.net/trainingrite_epaysystem" &_ 
       "/trainingrite_epaysystem/tr_epaysys.asmx" 



dim http 
set http=createObject("Microsoft.XMLHTTP") 
http.open "POST",EndPointLink,false 
http.setRequestHeader "Content-Type","text/xml" 

msgbox "REQUEST : " & strRequest 
http.send strRequest 

If http.Status = 200 Then 
'msgbox "RESPONSE : " & http.responseXML.xml 
msgbox "RESPONSE : " & http.responseText 
responseText=http.responseText 
else 
msgbox "ERRCODE : " & http.status 
End If 

Call ParseTag(responseText,"AuthorizationResult") 

Call CreateXMLEvidence(responseText,strRequest) 

'Function to fetch the required message from a TAG 
Function ParseTag(ResponseXML,SearchTag) 

ResponseMessage=split(split(split(ResponseXML,SearchTag)(1),"</")(0),">")(1) 
Msgbox ResponseMessage 

End Function 

'Function to create XML test evidence files 
Function CreateXMLEvidence(ResponseXML,strRequest) 

Set fso=createobject("Scripting.FileSystemObject") 
Set qfile=fso.CreateTextFile("C:\Users\RajkumarJoshua\Desktop\DCIM\SampleResponse.xml",2) 
Set qfile1=fso.CreateTextFile("C:\Users\RajkumarJoshua\Desktop\DCIM\SampleReuest.xml",2) 

qfile.write ResponseXML 
qfile.close 

qfile1.write strRequest 
qfile1.close 

End Function 
+0

आपको अपने कोड को पूरक करने के लिए कुछ टिप्पणी करने की आवश्यकता है। – theblindprophet

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