Qual código VBA é necessário para executar um HTTP POST a partir de uma planilha do Excel?
Qual código VBA é necessário para executar um HTTP POST a partir de uma planilha do Excel?
Respostas:
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("")
Como alternativa, para maior controle sobre a solicitação HTTP, você pode usar WinHttp.WinHttpRequest.5.1
no lugar de MSXML2.ServerXMLHTTP
.
objHTTP.responseText
.
ByRef
ou não. É por isso que usá-los com variáveis de objeto de um tipo que não possui um membro padrão causa erros em tempo de execução; e usá-los em um objeto que faz ter um membro padrão, passa o valor desse membro padrão em vez do objeto real.
Se você precisar que ele funcione no Mac e no Windows, use o 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
Notas:
Para mais detalhes, você pode ver meu resumo completo sobre " uso de serviços web do Excel ".
Além da resposta de Bill the Lizard :
A maioria dos back-end analisa os dados brutos da postagem. No PHP, por exemplo, você terá uma matriz $_POST
na qual variáveis individuais nos dados de postagem serão armazenadas. Nesse caso, você precisa usar um cabeçalho adicional "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")
Caso contrário, você precisará ler os dados brutos da postagem na variável "$HTTP_RAW_POST_DATA"
.
Você pode usar ServerXMLHTTP
em um projeto VBA adicionando uma referência a MSXML
.
- Abra o Editor do VBA (geralmente editando uma macro)
- Vá para a lista de referências disponíveis
- Verifique Microsoft XML
- Clique OK.
(de Referenciando MSXML em projetos VBA )
A documentação do ServerXMLHTTP MSDN possui detalhes completos sobre todas as propriedades e métodos do ServerXMLHTTP.
Em resumo, porém, funciona basicamente assim:
- Chame o método aberto para conectar-se ao servidor remoto
- Ligue para enviar para enviar a solicitação.
- Leia a resposta via responseXML , responseText , responseStream ou responseBody
Para concluir a resposta dos outros usuários:
Para isso, criei um objeto "WinHttp.WinHttpRequest.5.1" .
Envie uma solicitação de postagem com alguns dados do Excel usando o 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")
Envie uma solicitação de obtenção com autenticação de token do Excel usando o 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
, você pode lê-lo como: TCRequestItem.ResponseText
depois de fazerTCRequestItem.send
Eu fiz isso antes de usar a biblioteca MSXML e, em seguida, usar o objeto XMLHttpRequest, veja aqui .