| # Copyright 2012 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| import sys |
| |
| try: |
| from urllib.request import urlopen as _urlopen |
| import urllib.parse as urllib_parse |
| import urllib.request as urllib_request |
| from urllib.parse import splituser as urllib_parse_splituser |
| except ImportError: |
| from urllib import urlopen as _urlopen |
| import urlparse as urllib_parse |
| import urllib2 as urllib_request |
| from urllib import splituser as urllib_parse_splituser |
| |
| def urlopen(url): |
| try: |
| return _urlopen(url) |
| except SystemExit: |
| raise |
| except Exception: |
| if sys.hexversion < 0x3000000: |
| raise |
| parse_result = urllib_parse.urlparse(url) |
| if parse_result.scheme not in ("http", "https") or \ |
| not parse_result.username: |
| raise |
| |
| return _new_urlopen(url) |
| |
| def _new_urlopen(url): |
| # This is experimental code for bug #413983. |
| parse_result = urllib_parse.urlparse(url) |
| netloc = urllib_parse_splituser(parse_result.netloc)[1] |
| url = urllib_parse.urlunparse((parse_result.scheme, netloc, parse_result.path, parse_result.params, parse_result.query, parse_result.fragment)) |
| password_manager = urllib_request.HTTPPasswordMgrWithDefaultRealm() |
| if parse_result.username is not None: |
| password_manager.add_password(None, url, parse_result.username, parse_result.password) |
| auth_handler = urllib_request.HTTPBasicAuthHandler(password_manager) |
| opener = urllib_request.build_opener(auth_handler) |
| return opener.open(url) |