1

我已经尝试了此问答中的所有方法来解决它,但我仍然收到该错误。

我最近的尝试是基于Lukasa 的评论,我的代码如下所示:

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 中运行良好)

4

2 回答 2

1

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

否则,您将不得不等到我们发布 2.0

于 2013-09-08T14:04:43.923 回答
0

您必须http用作代理的协议(尽管您正在使用https它)

proxy = 'http://78.130.136.2:8080'

但就像@sigmavirus24 所说,当前发布的请求版本在 http 代理方面存在一些问题。使用此设置,您将能够使用代理(并非所有代理,但此代理特别有效)。

注意:使用当前版本,您和您的代理之间的数据未加密。

重复:代理和它之间的一切,你可以读取数据!

于 2013-09-08T15:30:53.440 回答