我已经尝试了q&a上的所有内容来解决它,但我仍然收到了这个错误。
我的最新尝试基于Lukasa's comment,我的代码如下:
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import ssl
class MyAdapter(HTTPAdapter):
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = PoolManager(num_pools=connections,
maxsize=maxsize,
block=block,
ssl_version=ssl.PROTOCOL_TLSv1)
proxy = 'https://78.130.136.2:8080'
g = 'https://www.google.com/'
s = requests.Session()
s.mount('https://', MyAdapter())
r = s.get(g, proxies={'https': proxy} )
print r.text.encode('utf-8')
我收到的完整错误是:
Traceback (most recent call last):
File "/Users/Dionysis_Lorentzos/Projects/getter/proxy.py", line 30, in <module>
r = s.get(g, proxies={'https': proxy}, verify=True )
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/sessions.py", line 347, in get
return self.request('GET', url, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/sessions.py", line 335, in request
resp = self.send(prep, **send_kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/sessions.py", line 438, in send
r = adapter.send(request, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/adapters.py", line 331, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol
那么我怎样才能通过https
的代理获取网站的数据?
(代理在我的Firefox中正常工作)
答案 0 :(得分:1)
在PyPI上的所有Requests版本中,由于不支持HTTPS
动词,因此不支持通过代理请求CONNECT
个站点。我们的2.0版预发布分支有这种支持,它适用于我尝试过的每个代理。如果您想检查出来并尝试使用它,那么您也不需要自定义适配器。
否则,您必须等到我们发布2.0
答案 1 :(得分:0)
您必须使用http
作为代理协议(尽管您使用的是https
)
proxy = 'http://78.130.136.2:8080'
但是像@ sigmavirus24所说的当前发布版本的请求有一些http代理问题。 使用此设置,您将能够使用代理(不是所有代理,但特别适用于此代理)。
小心: 对于当前版本,您和代理之间的数据未加密。
重复:代理及其与您之间的所有内容都可以读取数据!