Qual código VBA é necessário para executar um HTTP POST a partir de uma planilha do Excel?
135
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:
Notas:
Para mais detalhes, você pode ver meu resumo completo sobre " uso de serviços web do Excel ".
fonte
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"
:Caso contrário, você precisará ler os dados brutos da postagem na variável
"$HTTP_RAW_POST_DATA"
.fonte
Você pode usar
ServerXMLHTTP
em um projeto VBA adicionando uma referência aMSXML
.(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:
fonte
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:
Envie uma solicitação de obtenção com autenticação de token do Excel usando o VBA:
fonte
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 .
fonte