Який код VBA необхідний для виконання HTTP POST з електронної таблиці Excel?
Який код VBA необхідний для виконання HTTP POST з електронної таблиці Excel?
Відповіді:
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-запитом, який ви можете використовувати WinHttp.WinHttpRequest.5.1
замість MSXML2.ServerXMLHTTP
.
objHTTP.responseText
.
ByRef
чи ні. Ось чому використання їх з об’єктними змінними типу, у якого немає учасника за замовчуванням, викликає помилки під час виконання; і використовуючи їх на об'єкті, який має член за замовчуванням, передає значення цього члена за замовчуванням замість фактичного об'єкта.
Якщо він потрібен для роботи на Mac і Windows, ви можете використовувати QueryTables:
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
Примітки:
Для отримання більш детальної інформації ви можете побачити моє повне резюме про " використання веб-служб від Excel ".
Окрім прихильника Білла Ящера :
Більшість із загальних даних аналізують необроблені дані публікації. Наприклад, у PHP, у вас буде масив, $_POST
в якому будуть зберігатися окремі змінні в даних публікації. У цьому випадку вам потрібно використовувати додатковий заголовок "Content-type: application/x-www-form-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"
.
Ви можете використовувати ServerXMLHTTP
в проекті VBA, додавши посилання на MSXML
.
- Відкрийте редактор VBA (зазвичай, редагуючи макрос)
- Перейдіть до списку доступних посилань
- Перевірте Microsoft XML
- Натисніть кнопку ОК.
(з посилань на MSXML в рамках VBA-проектів )
Документація ServerXMLHTTP MSDN має повну інформацію про всі властивості і методи ServerXMLHTTP.
Якщо коротко, це працює в основному так:
- Виклик відкритого методу для підключення до віддаленого сервера
- Надіслати дзвінок, щоб надіслати запит.
- Прочитайте відповідь через responseXML , responseText , responseStream або responseBody
Щоб заповнити відповідь інших користувачів:
Для цього я створив об’єкт "WinHttp.WinHttpRequest.5.1" .
Надішліть запит на пошту з деякими даними від Excel за допомогою VBA:
Dim LoginRequest As Object
Set LoginRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
LoginRequest.Open "POST", "http://...", False
LoginRequest.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
LoginRequest.send ("key1=value1&key2=value2")
Надішліть запит на отримання аутентифікації маркера від Excel за допомогою VBA:
Dim TCRequestItem As Object
Set TCRequestItem = CreateObject("WinHttp.WinHttpRequest.5.1")
TCRequestItem.Open "GET", "http://...", False
TCRequestItem.setRequestHeader "Content-Type", "application/xml"
TCRequestItem.setRequestHeader "Accept", "application/xml"
TCRequestItem.setRequestHeader "Authorization", "Bearer " & token
TCRequestItem.send
TCRequestItem Object
, ви можете прочитати її так: TCRequestItem.ResponseText
після цьогоTCRequestItem.send