2009-04-15 17 views
1

Ich füge Code hinzu, um einen Proxy-Server für den Zugriff auf das Internet zu verwenden. Der Code funktioniert ordnungsgemäß, wenn eine Datei von einem normalen (HTTP-) Speicherort angefordert wird, funktioniert jedoch nicht, wenn auf einen sicheren Speicherort (HTTPS) zugegriffen wird.Zugriff auf HTTPS-Site über Proxy Server

Dies ist der Code, der ganz gut funktioniert:

URL = "http://UnSecureSite.net/file.xml" 
Dim wr As HttpWebRequest = CType(WebRequest.Create(URL), HttpWebRequest) 
Dim proxy As System.Net.IWebProxy 
proxy = WebRequest.GetSystemWebProxy 
wr.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials 
Dim ws As HttpWebResponse = CType(wr.GetResponse(), HttpWebResponse) 

// (more work here) 

Sobald ich die URL zu HTTPS gehen ändern, erhalte ich eine 407 zu mir zurückgekehrt.

Wer hat irgendwelche Ideen?

Antwort

5

Eine HTTPS-Anfrage über einen Web-Proxy unterscheidet sich von einer Standard-HTTP-Anfrage. Eine reguläre HTTP-Anfrage verwendet die GET-Methode. Eine HTTPS-Anforderung muss jedoch eine CONNECT-Methode verwenden. Dann baut der Proxy lediglich einen Tunnel zum Server auf. Nachfolgende Nachrichten werden direkt zwischen dem Client und dem Server über den Proxy-Tunnel gesendet. Der Proxy hat keine Möglichkeit, die dazwischen fließenden Daten zu interpretieren.

Unter normalen Situationen:

Client -+- [CONNECT] ---> Proxy --- [DIRECT TCP] -+-> Server 
     |     |      | 
     +-------------[ENCRYPTED TCP]-------------+ 

Ich bin nicht genug mit dem VB-Code vertraut zu wissen, ob das, was geschieht. Ich vermute jedoch, dass dies nicht der Fall ist. Der einfachste Weg, dies zu überprüfen, besteht darin, die an den Proxy gesendete Nachricht abzufangen. Stellen Sie sicher, dass es mit einem "CONNECT ..." beginnt.

+0

+1 Brillante Antwort. Ich habe mich oft gefragt, wie HTTPS über einen Web-Proxy funktioniert (in Arbeit!) –