2009-08-12 84 views
8

Uso "WinHttp.WinHttpRequest.5.1" para enviar solicitudes HTTP POST de VBA en Excel. Pero no pude lograrlo para HTTPS, ya que recibí un error de certificado SSL.Solicitud HTTPS POST usando VBA para Excel

¿Qué código VBA usaría para negociar una conexión SSL a un sitio web desde VBA en Excel?

+1

¿Podría publicar algún código, por favor? Además, ¿es "WinHttp.WinHttpRequest.5.1" un componente COM? dónde encontrarlo? – shahkalpesh

Respuesta

8

El WinHttpRequest objeto tiene un método SetClientCertificate. Prueba este ejemplo de código tomado de la MSDN (Traté de adaptarlo para VBA):

' Instantiate a WinHttpRequest object. ' 
Dim HttpReq as new ActiveXObject("WinHttp.WinHttpRequest.5.1") 

' Open an HTTP connection. ' 
HttpReq.Open("GET", "https://www.test.com/", false) 

' Select a client certificate. ' 
HttpReq.SetClientCertificate("LOCAL_MACHINE\Personal\My Certificate") 

' Send the HTTP Request. ' 
HttpReq.Send() 
2

Aunque no he utilizado el componente COM (WinHttpRequest), parece que necesita una llamada a SetClientCertificate antes de llamar a enviar, según el enlace.

¿Eso ayuda?

2

Tengo la misma situación (envíe una solicitud http desde un VBA en Excel); He creado tres objetos:

Set HttpReq = CreateObject("WinHttp.WinHttpRequest.5.1") 

- para la clase de petición HTTP, y

Set fsobj = CreateObject("Scripting.FileSystemObject") 
Set txtobj = fso.OpenTextFile("C:\PKCERT.PEM") 

- para entrar en una variable el contenido del certificado, para pasarlo a HttpReq.SetClientCertificate,

certificate_data = txtobj.ReadAll 
HttpReq.SetClientCertificate (certificate_content) 

Para que pueda enviar la solicitud, incluido su certificado de clave pública, como de costumbre,

HttpReq.Send 

P.S. Encontré una secuencia de comandos en http://www.808.dk/?code-simplewinhttprequest - funcionó bien en mi caso, espero en la tuya también.