code: def open_with_auth(url, opener=urllib.request.urlopen):
      
  
      scheme, netloc, path, params, query, frag = urllib.parse.urlparse(url)
  
      # Double scheme does not raise on Mac OS X as revealed by a
      # failing test. We would expect "nonnumeric port". Refs #20.
      if netloc.endswith(':'):
          raise http_client.InvalidURL("nonnumeric port: ''")
  
      if scheme in ('http', 'https'):
          auth, host = urllib.parse.splituser(netloc)
      else:
          auth = None
  
      if not auth:
          cred = PyPIConfig().find_credential(url)
          if cred:
              auth = str(cred)
              info = cred.username, url
              log.info('Authenticating as %s for %s (from .pypirc)', *info)
  
      if auth:
          auth = "Basic " + _encode_auth(auth)
          parts = scheme, host, path, params, query, frag
          new_url = urllib.parse.urlunparse(parts)
          request = urllib.request.Request(new_url)
          request.add_header("Authorization", auth)
      else:
          request = urllib.request.Request(url)
  
      request.add_header('User-Agent', user_agent)
      fp = opener(request)
  
      if auth:
          # Put authentication info back into request URL if same host,
          # so that links found on the page will work
          s2, h2, path2, param2, query2, frag2 = urllib.parse.urlparse(fp.url)
          if s2 == scheme and h2 == host:
              parts = s2, netloc, path2, param2, query2, frag2
              fp.url = urllib.parse.urlunparse(parts)
  
      return fp
docs: Open a urllib2 request, handling HTTP authentication