VBA를 사용하여 Excel에서 HTTP Post 요청을 서버로 보내는 방법은 무엇입니까?
문제
Excel 스프레드 시트에서 HTTP 게시물을 수행하는 데 필요한 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에서 모두 작동 해야하는 경우 다음과 같은 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
메모:
- 출력과 관련하여 ... 결과를 VBA 기능이라고하는 동일한 셀로 결과를 반환 할 수 있는지 모르겠습니다. 위의 예에서 결과는 A2로 기록됩니다.
- 입력과 관련하여 ... 특정 셀을 변경할 때 결과가 새로 고쳐 지려는 경우 해당 셀이 VBA 기능에 대한 인수인지 확인하십시오.
- VBA가없는 Mac 2008 용 Excel에서는 작동하지 않습니다. Mac의 Excel 2011은 VBA를 다시 얻었습니다.
자세한 내용은 "에 대한 전체 요약을 참조하십시오."Excel의 웹 서비스 사용."
Anwser 외에도 도마뱀을 청구하십시오:
대부분의 백엔드는 원시 게시물 데이터를 구문 분석합니다. 예를 들어 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"에 대한 원시 게시물 데이터를 읽어야합니다.
MSXML에 대한 참조를 추가하여 VBA 프로젝트에서 ServerXMLHTTP를 사용할 수 있습니다.
- VBA 편집기 열기 (일반적으로 매크로 편집)
- 사용 가능한 참조 목록으로 이동하십시오
- Microsoft XML을 확인하십시오
- 확인을 클릭하십시오.
그만큼 ServerXMLHTTP MSDN 문서 ServerXMLHTTP의 모든 속성 및 방법에 대한 자세한 내용이 있습니다.
간단히 말해서, 그것은 기본적으로 다음과 같이 작동합니다.
- 부르다 열려 있는 원격 서버에 연결하는 메소드
- 부르다 보내다 요청을 보내기 위해.
- 응답을 읽으십시오 Responsexml, responsetext, 응답장 또는 응답 바디
MSXML 라이브러리를 사용하고 XMLHTTPREQUEST 객체를 사용하기 전에이 작업을 수행했습니다. 보다 http://scriptorium.serve-it.nl/view.php?sid=40