mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Fix #3008: `linkcheck
` builder ignores self-signed certificate URL
This commit is contained in:
parent
ce7fea9a35
commit
4c7bec6460
2
CHANGES
2
CHANGES
@ -10,6 +10,8 @@ Incompatible changes
|
|||||||
Features added
|
Features added
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
* #3008: ``linkcheck`` builder ignores self-signed certificate URL
|
||||||
|
|
||||||
Bugs fixed
|
Bugs fixed
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ from sphinx.builders import Builder
|
|||||||
from sphinx.util import encode_uri
|
from sphinx.util import encode_uri
|
||||||
from sphinx.util.console import purple, red, darkgreen, darkgray, \
|
from sphinx.util.console import purple, red, darkgreen, darkgray, \
|
||||||
darkred, turquoise
|
darkred, turquoise
|
||||||
from sphinx.util.requests import requests, useragent_header
|
from sphinx.util.requests import requests, useragent_header, is_ssl_error
|
||||||
|
|
||||||
|
|
||||||
class AnchorCheckParser(HTMLParser):
|
class AnchorCheckParser(HTMLParser):
|
||||||
@ -152,6 +152,9 @@ class CheckExternalLinksBuilder(Builder):
|
|||||||
else:
|
else:
|
||||||
return 'broken', str(err), 0
|
return 'broken', str(err), 0
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
|
if is_ssl_error(err):
|
||||||
|
return 'ignored', str(err), 0
|
||||||
|
else:
|
||||||
return 'broken', str(err), 0
|
return 'broken', str(err), 0
|
||||||
if response.url.rstrip('/') == req_url.rstrip('/'):
|
if response.url.rstrip('/') == req_url.rstrip('/'):
|
||||||
return 'working', '', 0
|
return 'working', '', 0
|
||||||
@ -211,6 +214,9 @@ class CheckExternalLinksBuilder(Builder):
|
|||||||
if lineno:
|
if lineno:
|
||||||
self.info('(line %4d) ' % lineno, nonl=1)
|
self.info('(line %4d) ' % lineno, nonl=1)
|
||||||
if status == 'ignored':
|
if status == 'ignored':
|
||||||
|
if info:
|
||||||
|
self.info(darkgray('-ignored- ') + uri + ': ' + info)
|
||||||
|
else:
|
||||||
self.info(darkgray('-ignored- ') + uri)
|
self.info(darkgray('-ignored- ') + uri)
|
||||||
elif status == 'local':
|
elif status == 'local':
|
||||||
self.info(darkgray('-local- ') + uri)
|
self.info(darkgray('-local- ') + uri)
|
||||||
|
@ -14,6 +14,7 @@ from __future__ import absolute_import
|
|||||||
import requests
|
import requests
|
||||||
import warnings
|
import warnings
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
|
from requests.packages.urllib3.exceptions import SSLError
|
||||||
|
|
||||||
# try to load requests[security]
|
# try to load requests[security]
|
||||||
try:
|
try:
|
||||||
@ -41,3 +42,14 @@ except pkg_resources.UnknownExtra:
|
|||||||
|
|
||||||
useragent_header = [('User-Agent',
|
useragent_header = [('User-Agent',
|
||||||
'Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0')]
|
'Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0')]
|
||||||
|
|
||||||
|
|
||||||
|
def is_ssl_error(exc):
|
||||||
|
if isinstance(exc, SSLError):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
args = getattr(exc, 'args', [])
|
||||||
|
if args and isinstance(args[0], SSLError):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
Loading…
Reference in New Issue
Block a user