[excel] VBA를 사용하여 Excel에서 서버로 HTTP POST 요청을 보내려면 어떻게해야합니까?

Excel 스프레드 시트에서 HTTP POST를 수행하려면 어떤 VBA 코드가 필요합니까?



답변

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.


답변

Mac과 Windows 모두에서 작동하려면 QueryTable을 사용할 수 있습니다.

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

노트:

  • 출력에 관해서 … VBA 함수를 호출 한 동일한 셀에 결과를 반환 할 수 있는지 여부를 알 수 없습니다. 위의 예에서 결과는 A2에 기록됩니다.
  • 입력과 관련하여 … 특정 셀을 변경할 때 결과를 새로 고치려면 해당 셀이 VBA 함수의 인수인지 확인하십시오.
  • VBA가없는 Mac 2008 용 Excel에서는 작동하지 않습니다. Mac 용 Excel 2011은 VBA를 다시 얻었습니다.

자세한 내용은 ” Excel의 웹 서비스 사용 “에 대한 전체 요약을 볼 수 있습니다 .


답변

Bill the Lizard 의 답변 외에도 :

대부분의 백엔드는 원시 게시물 데이터를 구문 분석합니다. 예를 들어 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.

  1. VBA 편집기를 엽니 다 (일반적으로 매크로를 편집하여)
  2. 사용 가능한 참조 목록으로 이동
  3. Microsoft XML 확인
  4. 확인을 클릭하십시오.

( VBA 프로젝트 내 MSXML 참조 에서 )

ServerXMLHTTP의 MSDN 문서는 모든 속성과 ServerXMLHTTP의 방법에 대한 자세한 내용이 있습니다.

간단히 말해 기본적으로 다음과 같이 작동합니다.

  1. 원격 서버에 연결하기위한 open 메소드 호출
  2. 요청을 보내 려면 send를 호출 하십시오.
  3. responseXML , responseText , responseStream 또는 responseBody 를 통해 응답을 읽으십시오.

답변

다른 사용자의 응답을 완료하려면 다음을 수행하십시오.

이를 위해 “WinHttp.WinHttpRequest.5.1” 개체를 만들었습니다 .

VBA를 사용하여 Excel에서 일부 데이터로 게시물 요청을 보내십시오.

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")

VBA를 사용하여 Excel에서 토큰 인증으로 요청을 보냅니다.

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


답변

MSXML 라이브러리를 사용하기 전에 XMLHttpRequest 객체를 사용하기 전에이 작업을 수행했습니다 ( 여기 참조) .


답변