要重现我的问题,您需要让小提琴手打开并观看互联网流量。 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
答案 0 :(得分:0)
看起来您实际上并不是在发送代理请求。
根据您的代码,您所做的只是向代理发送一个普通请求,但使用https://
URL。这不是HTTPS的代理如何工作。相反,您必须发送CONNECT请求以建立隧道,然后将套接字升级到SSL,最后在此隧道中发送非代理请求。