requests.exceptions.SSLError:[Errno 8] _ssl.c:504:违反协议发生EOF

时间:2013-09-07 17:15:34

标签: python ssl proxy python-requests http-proxy

我已经尝试了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中正常工作)

2 个答案:

答案 0 :(得分:1)

在PyPI上的所有Requests版本中,由于不支持HTTPS动词,因此不支持通过代理请求CONNECT个站点。我们的2.0版预发布分支有这种支持,它适用于我尝试过的每个代理。如果您想检查出来并尝试使用它,那么您也不需要自定义适配器。

否则,您必须等到我们发布2.0

答案 1 :(得分:0)

您必须使用http作为代理协议(尽管您使用的是https

proxy = 'http://78.130.136.2:8080'

但是像@ sigmavirus24所说的当前发布版本的请求有一些http代理问题。 使用此设置,您将能够使用代理(不是所有代理,但特别适用于此代理)。

小心: 对于当前版本,您和代理之间的数据未加密

重复:代理及其与您之间的所有内容都可以读取数据!