首页 > 解决方案 > python请求异常 - 不断抛出错误

问题描述

收到 HTTP 200 时脚本可以正常工作。但是,一旦我收到异常,我就会收到错误。我知道该网站没有安装有效的 SSL 证书,并且我尝试使用 requests.exceptions.RequestException 来捕获任何内容,但仍然会引发错误。我还会不时出现代理错误等异常,并且 requests.exceptions.RequestException 不会捕获它。我也尝试过,在 try: request.raise_for_status() 下仍然会引发错误。代码如下:

def verify_ssl(proxy_info, target): 
   print('Attempting to verify SSL Cert on %s:443' % target)
   if proxy_info == None:
      response = requests.get('https://%s' % target)
   if proxy_info != None:
      response = requests.get('https://%s' % target, proxies=proxy_info)
   try:
      response
   except requests.exceptions.SSLError as g:
      print('SSL Verification Error %s' % g)
   return ('Successfully Verified SSL Cert: HTTP 200 received.\n')

调试向我抛出了这个:

    Traceback (most recent call last):
  File "c:\Users\appleta\Desktop\ping.py", line 69, in <module>
    ssl_result = verify_ssl(proxy_info, target)
  File "c:\Users\appleta\Desktop\ping.py", line 37, in verify_ssl
    response = requests.get('https://%s' % target)
  File "C:\Python34\lib\site-packages\requests\api.py", line 72, in get
    return request('get', url, params=params, **kwargs)
  File "C:\Python34\lib\site-packages\requests\api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Python34\lib\site-packages\requests\sessions.py", line 512, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Python34\lib\site-packages\requests\sessions.py", line 622, in send
    r = adapter.send(request, **kwargs)
  File "C:\Python34\lib\site-packages\requests\adapters.py", line 511, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='blabla.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)'),))

标签: pythonpython-requests

解决方案


在 python 中,表达式:

response

永远不会产生异常。您必须将两个get调用都放在try块内:

def verify_ssl(proxy_info, target): 
   print('Attempting to verify SSL Cert on %s:443' % target)
   try:
       if proxy_info is None:
          response = requests.get('https://%s' % target)
       else:
          response = requests.get('https://%s' % target, proxies=proxy_info)
   except requests.exceptions.SSLError as g:
      print('SSL Verification Error %s' % g)
      return 'Got SSL error'
   return 'Successfully Verified SSL Cert: HTTP 200 received.\n'

另外:请注意,您总是返回字符串Successfully Verified SSL Cert ...,因为即使出现错误,您也只会打印错误消息,然后继续执行。您可能想在except块中返回不同的东西。


推荐阅读