2014-11-14 82 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