2014-11-14 114 views
0

重現我的問題,您需要有提琴手打開並觀看互聯網流量。 Fiddler的代理服務器是127.0.0.1,端口是8888.但實際上,我通過任何使用HTTPS的代理來解決此問題。使用HTTPSConnection類,我設置了代理服務器和端口,但我最終得到這個錯誤:httlib和HTTPSConnection問題使用代理服務器(代理服務器)

'SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol'

這個錯誤可以歸因於無效的代理,但我得到它的任何和所有代理。

我使用Python httlib執行POST操作到站點:

content_type, body = self._encode_multipart_formdata(fields, files) # encodes a file to string, standard multipart post stuff 

    headers = { 
     'content-type': content_type, 
     'content-length': str(len(body)) 
    } 

    if proxy_url: 
     if ssl: 
      h = httplib.HTTPSConnection(proxy_url, proxy_port) 

      h.request('POST', 'https://' + host + selector, body, headers) 

     else: 
      h = httplib.HTTPConnection(proxy_url, proxy_port) 
      h.request('POST', 'http://' + host + selector, body, headers) 
    else: 
     if ssl: 
      h = httplib.HTTPSConnection(host,port) 
      h.request('POST', selector, body, headers) 
     else: 
      h = httplib.HTTPConnection(host,port) 
      h.request('POST', selector, body, headers) 

    resp_data = h.getresponse().read() 
    try: 

     result = json.loads(resp_data) 
    except: 
     return None 

我的Python包寫入,是數千行代碼的,所以我真的不能切換到請求

有趣的是,在進行基本的POST和GET操作時,我可以使用urllib2獲得調用(非多部分帖子)。

請指教!

謝謝

我使用Python 2.7.5

+0

1.發佈完整的回溯。 2.當這個錯誤發生時,你調用的函數的參數是什麼? – User 2014-11-14 17:00:24

+0

我通過切換到urllib2解決了我的問題。我真正注意到的唯一情況是,httplib似乎比urllib2更快地上傳文件。 – 2014-11-14 19:35:57

回答

0

它看起來並不像你實際上是發送代理請求。 根據你的代碼,你所做的只是發送一個普通的請求到代理服務器,但是一個https://的URL。這不是HTTPS的代理如何工作。相反,您必須發送CONNECT請求來建立隧道,然後將套接字升級到SSL,最後在此隧道內發送非代理請求。

+0

你有關於如何做到這一點的示例? – 2014-11-17 15:55:14

+0

不。我不是一個Python專家,我不知道是否有一個簡單的方法來完成這個任務。但是你可以看看'ssl_tunnel'方法和'sslrwap'。 – 2014-11-17 20:38:41

+0

我會試一試,讓你知道我找到了什麼。 – 2014-12-04 12:14:05