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
.
- VBA 편집기를 엽니 다 (일반적으로 매크로를 편집하여)
- 사용 가능한 참조 목록으로 이동
- Microsoft XML 확인
- 확인을 클릭하십시오.
( VBA 프로젝트 내 MSXML 참조 에서 )
ServerXMLHTTP의 MSDN 문서는 모든 속성과 ServerXMLHTTP의 방법에 대한 자세한 내용이 있습니다.
간단히 말해 기본적으로 다음과 같이 작동합니다.
- 원격 서버에 연결하기위한 open 메소드 호출
- 요청을 보내 려면 send를 호출 하십시오.
- 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