http lib和HTTPConnection使用代理(代理)问题

时间:2014-11-14 14:36:34

标签: python python-2.7 proxy httplib

要重现我的问题,您需要让小提琴手打开并观看互联网流量。 Fiddler的proxyurl是127.0.0.1,端口是8888.但实际上,我通过HTTPS使用任何代理都会遇到此问题。使用HTTPSConnection类,我设置了代理和端口,但最终我收到了这个错误:

  

' SSLError:[Errno 1] _ssl.c:504:错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议'

此错误可归因于无效的代理,但我可以将其用于任何和所有代理。

我正在使用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

1 个答案:

答案 0 :(得分:0)

看起来您实际上并不是在发送代理请求。 根据您的代码,您所做的只是向代理发送一个普通请求,但使用https:// URL。这不是HTTPS的代理如何工作。相反,您必须发送CONNECT请求以建立隧道,然后将套接字升级到SSL,最后在此隧道中发送非代理请求。