2009-08-12 19 views
8

Ich verwende "WinHttp.WinHttpRequest.5.1", um HTTP-POST-Anfragen von VBA in Excel zu senden. Aber ich konnte es nicht für HTTPS tun, da ich einen SSL-Zertifikatfehler erhalten habe.HTTPS POST-Anfrage mit VBA für Excel

Mit welchem ​​VBA-Code würden Sie eine SSL-Verbindung zu einer Website über VBA in Excel aushandeln?

+1

Könnten Sie bitte einen Code posten? Ist "WinHttp.WinHttpRequest.5.1" eine COM-Komponente? Wo finde ich es? – shahkalpesh

Antwort

8

Die WinHttpRequest Objekt eine SetClientCertificate Methode. Versuchen Sie diesen Code Beispiel aus dem MSDN (Ich habe versucht, es für VBA anpassen):

' 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

Während ich nicht die COM-Komponente (WinHttpRequest) verwendet haben, es scheint, dass Sie einen Anruf zu SetClientCertificate müssen vor dem Aufruf senden, gemäß dem Link.

Hilft das?

2

Ich habe die gleiche Situation (senden Sie eine HTTP-Anfrage von einem VBA in Excel); Ich habe drei Objekte:

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

- für den HTTP-Request-Klasse und

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

- in einen variablen Inhalt um das Zertifikat zu erhalten, zu übergeben es an HttpReq.SetClientCertificate,

certificate_data = txtobj.ReadAll 
HttpReq.SetClientCertificate (certificate_content) 

So kann ich die Anfrage einschließlich seiner öffentlichen Schlüsselzertifikat senden, wie üblich,

HttpReq.Send 

P.S. Ich fand ein Skript bei http://www.808.dk/?code-simplewinhttprequest - es funktionierte gut in meinem Fall, hoffe auch auf deine.