Python 网络抓取 SSLError: 错误握手

2024-09-30 22:28:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新编程-尤其是关于SSL/TSL证书的网络垃圾问题,所以请不要屠宰我啊哈!在

对,所以。。。在

我写的脚本在我的Mac电脑(OS X El Capitan 10.11.15)上完美无瑕,它基本上是从一个登录的网站上到处抓取一些数字。当我试图在另外两台运行Windows7 64位和Windows10 32位的计算机上运行该程序时,问题就出现了。我对握手和SSL有基本的了解,但还不足以弄清楚这里发生了什么。在

我尝试访问的网站有一点证书问题(chrome不允许你访问它,但是Mozilla和Safari允许),但是我总是通过使用verify=False参数来解决这个问题请求。会话().得到(…..)。顺便说一下,在课程的最上面我有:

 with requests.Session() as c:

以防第179行有点混乱。在

我在脚本的开头也有这样的内容(尽管hashtagging没有什么区别):

^{pr2}$

以下是完整的回溯:

SSLError                                  Traceback (most recent call last)
C:\Users\indy_\Desktop\bk_programs\var.py in <module>()
    226 hh_saleslist, hh_settleinvlist = hh_scraper()
    227 tillster_webvals = tillster_puller()
--> 228 sicom_report_esg, sicom_report_cor, sicom_report_nor, sicom_report_gry, sicom_report_bst = sicom_scraper()
    229 
    230 

C:\Users\indy_\Desktop\bk_programs\var.py in sicom_scraper()
    177         for i in range(len(ips)):
    178             # Retrieve the CSRF token first
--> 179             soup = BeautifulSoup(c.get(login_urllist[i], verify=False).content, 'html.parser')
    180             csrftoken = soup.find('input', dict(name='XXX_login_token'))['value']
    181 

C:\Users\indy_\AppData\Local\Enthought\Canopy32\User\lib\site-packages\requests\sessions.pyc in get(self, url, **kwargs)
    485 
    486         kwargs.setdefault('allow_redirects', True)
--> 487         return self.request('GET', url, **kwargs)
    488 
    489     def options(self, url, **kwargs):

C:\Users\indy_\AppData\Local\Enthought\Canopy32\User\lib\site-packages\requests\sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    473         }
    474         send_kwargs.update(settings)
--> 475         resp = self.send(prep, **send_kwargs)
    476 
    477         return resp

C:\Users\indy_\AppData\Local\Enthought\Canopy32\User\lib\site-packages\requests\sessions.pyc in send(self, request, **kwargs)
    583 
    584         # Send the request
--> 585         r = adapter.send(request, **kwargs)
    586 
    587         # Total elapsed time of the request (approximately)

C:\Users\indy_\AppData\Local\Enthought\Canopy32\User\lib\site-packages\requests\adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
    475         except (_SSLError, _HTTPError) as e:
    476             if isinstance(e, _SSLError):
--> 477                 raise SSLError(e, request=request)
    478             elif isinstance(e, ReadTimeoutError):
    479                 raise ReadTimeout(e, request=request)

SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_read_bytes', 'sslv3 alert handshake failure')],)",) 

我知道有其他类似的职位,但我似乎不能得到任何工作。如果有人能指出我的错误或者给我一些有用的文件,我将非常感激。在

我运行的是python2.7.11。在

谢谢你

编辑-更多信息

有问题的URL是https://81.137.196.234/~sicom/mgrng/login.php

以及所有已安装模块的列表:

“注册表路径==1.0”,“appinst==2.1.1.5,,‘apptools==4.4.0,’,‘atom==0.3.3.10’,‘backports abc==0.4.4‘4.4.4.1’,,‘美化’‘美丽组==3.2.1’,‘CasualArius==1.1.1’,‘catalyst==1.0.2.2’,‘CertFi==2016.2.2.28’,‘cffi==1.7.0,‘‘7.7.0’,‘chaco==4.5.0’,‘chardet==2.3.0.0’,‘codetools==4.2.2.2.0.0’,.6','configparser==3.5.0','cryptography==1.5',‘cycler==0.10.0.0’,‘Orcorator==4.0.9’,‘distribute remove==1.0.0.0,’,‘docutils==0.12.12’,‘enable==4.5.1’,‘enaml==0.9.8.8’,‘Enclosur==0.4.4.3’,‘encore==0.6.0.0’,‘ensTatelle==4.8.12’,‘entrypoints==0.2.2.2’,‘Envisisage==4.5.1’,‘示例==7.3.3’,‘faulthandler==2.4.4’,‘雪花8’‘‘5.5.5.999','人性化==0.5.1','idle==2.7.3',‘idna==2.1.1’,‘ipaddress==1.0.16’,‘IPYNEL==4.3.1.1’,‘IPythonGenUtils==0.1.0 0’,‘ipython4==4.1.2 2’,‘ipython==4.0.0.0’,‘ipywidgets==5.1.5’,‘金JA2==2.8.8’,‘jsonschema==2.4.4.0’,‘JPYTER客户==4.2.2.2.2.2’,‘JPYTER控制台==4.1.1.1.1.1’,‘JPYter核心==4.1.1.1.0.0.0.0’magic==0.2.0','kiwisolver==0.1.3','libopenjpeg==2.1.0','libpng==1.6.12',‘Li钠钠==1.0.3.3’,‘lxml==3.6.0.0’,‘markupsafe==0.23’,‘matplotlib==1.5.1 1’,‘mccabe==0.3.1’,‘memory profiler==0.41.41’,‘mistune==0.7.1.1’,‘mkl服务==1.0’,‘mkl==11.1.1.4’,‘mpmath==0.19’,‘nbconvert==4.2.0.0’,‘nbformat==4.0.0.1’,‘ndg HTPSCClient==0.4.4.4.2.2.2.2’,‘‘‘‘‘.1','numpy==1.10.4','pandas==0.18.0','路径。py==8.1.1英尺,‘pep8==1.7.0‘pep8==1.7.0’,‘pexpect==2.4’,‘pickleshare==0.5’,‘pil remove==1.0.0.0’,‘枕头==3.2.0’,‘pip==8.1.2.2’,‘Pl绘==1.9.10’,‘ply==3.8’,‘psutil==3.3.0’,‘pyaudio==0.2.4’,‘pycparser==2.14’,‘pycrypto==2.6.1.1.1.1.1.0’,‘pyface==5.1.1.0’,‘‘pyflakes=gments==2.1.3','pyopenssl==16.1.0','pyparsing==2.0.3','pyeradline==2.1',‘python dateutil==2.5.2’、‘pytz==2016.3’、‘pytz==2016.3’、‘pywin32==220’、‘pyzmq==15.2.2.0’、‘QT控制台==4.2.1’、‘SCpypy==0.17.1.1’、‘setuptools==23.1.1.0.0’、‘Simplegengeneric==0.8.1.1.1.1.1‘1.8.1.1’、‘‘单利’‘3.4.0.0’上’、‘sympy==1.0.0’、‘龙卷风==4.3.3’、‘牵引’、‘牵引者’、‘QT控制台’‘4 1','traits==4.5.0','traitsui==5.1.0','urllib3==1.16','wxpython==3.0.2.0','xlwt==1.1.2'

>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2g  1 Mar 2016'

Steffen评论后的第二次编辑

import requests
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += ':RC4-SHA' 
with requests.Session() as c:

    url = "https://81.137.196.234/~sicom/mgrng/login.php"
    page = c.get(url, verify=False)
    print page.content

回溯是:

SSLError                                  Traceback (most recent call last)
c:\users\indy_\appdata\local\temp\tmpkuleyd.py in <module>()
      6 
      7     url = "https://81.137.196.234/~sicom/mgrng/login.php"
----> 8     page = c.get(url, verify=False)
      9     print page.content
     10 

C:\Users\indy_\AppData\Local\Enthought\Canopy32\User\lib\site-packages\requests\sessions.pyc in get(self, url, **kwargs)
    485 
    486         kwargs.setdefault('allow_redirects', True)
--> 487         return self.request('GET', url, **kwargs)
    488 
    489     def options(self, url, **kwargs):

C:\Users\indy_\AppData\Local\Enthought\Canopy32\User\lib\site-packages\requests\sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    473         }
    474         send_kwargs.update(settings)
--> 475         resp = self.send(prep, **send_kwargs)
    476 
    477         return resp

C:\Users\indy_\AppData\Local\Enthought\Canopy32\User\lib\site-packages\requests\sessions.pyc in send(self, request, **kwargs)
    583 
    584         # Send the request
--> 585         r = adapter.send(request, **kwargs)
    586 
    587         # Total elapsed time of the request (approximately)

C:\Users\indy_\AppData\Local\Enthought\Canopy32\User\lib\site-packages\requests\adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
    475         except (_SSLError, _HTTPError) as e:
    476             if isinstance(e, _SSLError):
--> 477                 raise SSLError(e, request=request)
    478             elif isinstance(e, ReadTimeoutError):
    479                 raise ReadTimeout(e, request=request)

SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_read_bytes', 'sslv3 alert handshake failure')],)",) 

我不需要检查和实际验证证书-我知道它是安全的。实际上,我只想绕过认证检查,这是我认为verify=False参数在请求.get()但显然它被忽视了。在

what chrome says

已解决

完全卸载了Python和所有额外的模块。在

已重新安装Python2.7.11。现在它吐出很多

C:\Users\indy_\AppData\Local\Enthought\Canopy32\User\lib\site-packages\requests\packages\urllib3\connectionpool.py:821: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html

不安全请求警告)

不过,谢天谢地,还是有办法的。在


Tags: inselfsendurlrequestpackageslocalrequests