2008-10-01 10 views

उत्तर

116
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
URL = "http://www.somedomain.com" 
objHTTP.Open "POST", URL, False 
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
objHTTP.send("") 

वैकल्पिक रूप से देखें, HTTP अनुरोध आप MSXML2.ServerXMLHTTP के स्थान पर WinHttp.WinHttpRequest.5.1 उपयोग कर सकते हैं पर अधिक नियंत्रण के लिए।

+8

HTTP अनुरोध पर अधिक नियंत्रण के लिए आप "MSXML2.ServerXMLHTTP" के बजाय "WinHttp.WinHttpRequest.5.1" का उपयोग कर सकते हैं –

+5

ध्यान देने योग्य यह है कि आप "POST" को "PUT" में बदलकर HTTP PUT जारी करने के लिए इसका उपयोग भी कर सकते हैं। PUT की सामग्री .send() विधि में जाती है। सेट करने के लिए आपको आवश्यक अतिरिक्त हेडर भी उपयोगकर्ता-एजेंट उदाहरण में उपयोग किए गए वाक्यविन्यास के बाद किया जा सकता है। – radicand

+2

यदि आप सब के रिटर्न वैल्यू का उपयोग नहीं करते हैं तो पैरामीटर के चारों ओर कोष्ठक का उपयोग न करें: वीबीए सिंटैक्स सब के पैरामीटर के आसपास कोष्ठक की अनुमति नहीं देता है (हालांकि उन्हें फ़ंक्शंस के लिए जरूरी है), इसलिए ये कोष्ठक वास्तव में अंकगणित कोष्ठक हैं जो ऑपरेटर प्राथमिकता को स्पष्ट करने के लिए उपयोग किए जाते हैं । भ्रामक और अस्पष्ट होने के अलावा, अगर अंततः तर्क एक वस्तु है तो अंततः एक रनटाइम त्रुटि हो सकती है। और हालांकि स्पष्ट रूप से नहीं पूछा गया है, आमतौर पर आप HTTP प्रतिक्रिया का उपयोग करना चाहते हैं, जिसका आप उल्लेख कर सकते हैं 'objHTTP.responseText' द्वारा पुनर्प्राप्त किया जा सकता है। – Leviathan

4

आप एमएसएक्सएमएल के संदर्भ को जोड़कर एक वीबीए परियोजना में ServerXMLHTTP का उपयोग कर सकते हैं।

  1. ओपन VBA संपादक
  2. जाओ उपलब्ध संदर्भ की सूची में
  3. Microsoft XML
  4. ठीक क्लिक करें चेक (आमतौर पर एक मैक्रो का संपादन करके)।

(Referencing MSXML within VBA Projects से)

ServerXMLHTTP MSDN documentation सभी गुण और ServerXMLHTTP के तरीकों के बारे में पूरी जानकारी नहीं है।

संक्षेप में, हालांकि, यह इस तरह से मूल रूप से काम करता है:

  1. कॉल open विधि कॉल send दूरस्थ सर्वर से
  2. कनेक्ट करने के लिए अनुरोध भेजने के लिए।
  3. MSXML लाइब्रेरी का उपयोग कर और फिर XMLHttpRequest ऑब्जेक्ट उपयोग करने से पहले responseXML, responseText, responseStream या responseBody
+0

वह लिंक जेएसक्रिप्ट का उपयोग करता है, वीबीए –

+1

धन्यवाद @ जॉन हेनकेल। मैंने उस उत्तर को अद्यतित करने के लिए कुछ बदलाव किए हैं। –

49

QueryTables आप पर दोनों मैक और Windows काम करने के लिए इसकी आवश्यकता है, तो आप उपयोग कर सकते हैं:

With ActiveSheet.QueryTables.Add(Connection:="URL;http://carbon.brighterplanet.com/flights.txt", Destination:=Range("A2")) 
    .PostText = "origin_airport=MSN&destination_airport=ORD" 
    .RefreshStyle = xlOverwriteCells 
    .SaveData = True 
    .Refresh 
End With 

नोट्स:

    उत्पादन के बारे में
  • ... मैं अगर यह संभव है पता नहीं है परिणामों को उसी सेल पर वापस करें जिसे वीबीए फ़ंक्शन कहा जाता है। उपर्युक्त उदाहरण में, परिणाम ए 2 में लिखा गया है।
  • इनपुट के संबंध में ... यदि आप कुछ सेल बदलते समय परिणाम ताज़ा करना चाहते हैं, तो सुनिश्चित करें कि वे कक्ष आपके वीबीए फ़ंक्शन के लिए तर्क हैं।
  • यह मैक 2008 के लिए एक्सेल पर काम नहीं करेगा, जिसमें वीबीए नहीं है। मैक 2011 के लिए एक्सेल वीबीए वापस मिला।

अधिक जानकारी के लिए, आप "using web services from Excel" के बारे में मेरा पूरा सारांश देख सकते हैं।

+3

+1: मुझे केवल विंडोज़ पर इसकी आवश्यकता है लेकिन एक क्रॉस-प्लेटफ़ॉर्म समाधान किसी और को लाभ पहुंचा सकता है। –

+0

मुझे नहीं लगता कि आप वास्तव में एचटीएमएल कोड तक पहुंच सकते हैं, आप केवल क्रॉस-प्लेटफ़ॉर्म समाधान और +1 (यदि मैं कर सकता था) के लिए प्रदान किए गए वेब पेज (वास्तविक HTML कोड नहीं) – user1493046

+1

+1 पर जानकारी प्राप्त कर सकता हूं जिस्ट लिंक और सब के साथ पूरा सारांश। धन्यवाद!! –

31

Bill the Lizard का anwser के अलावा:

बैकेंड के अधिकांश कच्चे पद डेटा पार्स। उदाहरण के लिए PHP में, आपके पास एक सरणी $ _POST होगी जिसमें पोस्ट डेटा के भीतर अलग-अलग चर संग्रहित किए जाएंगे।इस मामले में आप एक अतिरिक्त हैडर ": आवेदन/x-www फार्म-urlencoded सामग्री-प्रकार": उपयोग करने के लिए

Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") 
URL = "http://www.somedomain.com" 
objHTTP.Open "POST", URL, False 
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded" 
objHTTP.send ("var1=value1&var2=value2&var3=value3") 

नहीं तो आप चर "$ HTTP_RAW_POST_DATA" पर कच्चे पद डेटा को पढ़ने के लिए।

+0

मैं इस अनुरोध को पोस्ट करने की कोशिश कर रहा हूं (घुंघराले ब्रेसिज़ के साथ) और संकलन त्रुटियां प्राप्त करें ... क्या आप मदद कर सकते हैं: "{" अनुरोध ": {" कारनाम ":" होंडा "," मॉडल ":" 1 ए 5 "}}" – fiddle

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