次のシナリオに直面しています。HTTPSサーバーに接続するためにHTTPプロキシを使用する必要があります。いくつかの理由で、(暗号化の前に)生データにアクセスする必要があるため、HTTP固有のライブラリの1つではなくソケットライブラリを使用しています。したがって、最初にTCPソケットをHTTPプロキシに接続し、connectコマンドを発行します。
この時点で、HTTPプロキシは接続を受け入れ、それ以降のすべてのデータをターゲットサーバーに転送しているように見えます。ただし、SSLに切り替えようとすると、
エラー:140770FC:SSLルーチン:SSL23_GET_SERVER_HELLO:不明なプロトコル
ソケットがHTTPSターゲットではなくHTTPプロキシを使用してハンドシェイクを試行したことを示します。
これが私がこれまでに持っているコードです:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('proxy',9502))
s.send("""CONNECT en.wikipedia.org:443 HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:15.0) Gecko/20100101 Firefox/15.0.1
Proxy-Connection: keep-alive
Host: en.wikipedia.org
""")
print s.recv(1000)
ssl = socket.ssl(s, None, None)
ssl.connect(("en.wikipedia.org",443))
HTTPプロキシに接続した後にターゲットサーバーへのSSLソケットを開く正しい方法は何でしょうか?