Etam
Etam

Reputation: 4673

Read https url from Python with basic access authentication

How do you open https url in Python?

import urllib2

url = "https://user:[email protected]/path/
f = urllib2.urlopen(url)
print f.read()

gives:

httplib.InvalidURL: nonnumeric port: '[email protected]'

Upvotes: 4

Views: 15025

Answers (4)

John Giotta
John Giotta

Reputation: 16974

This has never failed me

import urllib2, base64
username = 'foo'
password = 'bar'
auth_encoded = base64.encodestring('%s:%s' % (username, password))[:-1]

req = urllib2.Request('https://somewebsite.com')
req.add_header('Authorization', 'Basic %s' % auth_encoded)
try:
    response = urllib2.urlopen(req)
except urllib2.HTTPError, http_e:
    # etc...
    pass

Upvotes: 11

David Webb
David Webb

Reputation: 193764

If you want to pass username and password information to urllib2 you'll need to use an HTTPBasicAuthHandler.

Here's a tutorial showing you how to do it.

Upvotes: 3

S.Lott
S.Lott

Reputation: 391972

Please read about the urllib2 password manager and the basic authentication handler as well as the digest authentication handler.

http://docs.python.org/library/urllib2.html#abstractbasicauthhandler-objects

http://docs.python.org/library/urllib2.html#httpdigestauthhandler-objects

Your urllib2 script must actually provide enough information to do HTTP authentication. Usernames, Passwords, Domains, etc.

Upvotes: 5

Johannes Charra
Johannes Charra

Reputation: 29953

You cannot pass credentials to urllib2.open like that. In your case, user is interpreted as the domain name, while [email protected] is interpreted as the port number.

Upvotes: 2

Related Questions