Http Post в Vba - PullRequest
       34

Http Post в Vba

8 голосов
/ 19 октября 2010

Я пытаюсь выяснить, как сделать POST в VBA.В идеале я ищу простой рабочий пример, с которым я могу играть.Это то, что я имею до сих пор, но я не совсем уверен, что с этим делать.В основном, как выглядят данные формы.

Function WinHTTPPostRequest(URL, formdata, Boundary)
  Dim http 

  Set http = CreateObject("MSXML2.XMLHTTP")

  http.Open "POST", URL, False

  'Set Content-Type header'
  http.setRequestHeader "Content-Type", "multipart/form-data; boundary=" + Boundary

  'Send the form data To URL As POST binary request'
  http.send formdata

  'Get a result of the script which has received upload'
  WinHTTPPostRequest = http.responseText
End Function

Редактировать:

Итак, я установил firebug, чтобы я мог получить имена объектов для «данных формы» (см. Код).Я бы подумал, что formdata будет выглядеть примерно так: «Form1 = A & Form2 = B».Но это все еще не работает.Любые предложения о том, как я должен сделать это лучше?

Редактировать: Таким образом, возможно, есть скрытые поля, которые мне нужно отправить в моем запросе POST.

Ответы [ 2 ]

4 голосов
/ 17 ноября 2010

Чтобы отправить данные формы в предложенном вами формате (т. Е. Идентично запросу GET), я считаю, что вам нужно установить заголовок Content-Type на «application / x-www-form-urlencoded».

Если вам нужно отправить более сложные данные (например, загружать файлы или другие двоичные данные), вам лучше установить Content-Type на «multipart / form-data». Подробная информация о том, как форматировать тело запроса, изложена в RFC 2388 , но вам может быть лучше найти библиотеку, которая сделает это за вас. Может быть сложно получить правильное форматирование, и нет необходимости заново изобретать колесо, если вы не делаете это в качестве учебного опыта.

0 голосов
/ 17 ноября 2010

Скачать Fiddler , чтобы вы могли отлаживать / декодировать HTTP-запросы.Возможно, вам просто не хватает чего-то простого.

Кроме того, при поиске по "HTTP POST VBA" в библиотеке MSDN есть многочисленные результаты.(http://social.msdn.microsoft.com/Search/en-US?query=%2BHTTP%20%2BPOST%20%2BVBA%20-stackoverflow%20-social&ac=8). (Кажется, что это «ошибка» при исключении контента, поэтому я исключил stackoverflow и социальные результаты в запросе.)

Как отправить данные формы с помощью объекта XMLHTTP или ServerXMLHTTP at http://support.microsoft.com/kb/290591, который использует VBScript, но легко конвертируется в vBA.

...