2016-12-01 11 views
2

を機械Pythonは私が要求を使用して動作するようにHTTP基本認証を得ることができるHTTP基本認証の実装

import urllib2, urllib 
passman = urllib2.HTTPPasswordMgrWithDefaultRealm() 
passman.add_password(None, url, user, pass) 
auth_handler = urllib2.HTTPBasicAuthHandler(passman) 
opener = urllib2.build_opener(auth_handler) 
urllib2.install_opener(opener) 
content = urllib2.urlopen(url, urllib.urlencode({'a': 'whatever'})) 

問題は、私は不正なエラーを取得しています私は機械化で同じことをしようとするとき:

import mechanize, urllib 
from base64 import b64encode 

browser = mechanize.Browser() 
b64login = b64encode('%s:%s' % (user, pass)) 
browser.addheaders.append(('Authorization', 'Basic %s' % b64login)) 
request = mechanize.Request(url) 
response = mechanize.urlopen(request, data=urllib.urlencode({'a':'whatever})) 

エラー:

HTTPError: HTTP Error 401: UNAUTHORIZED 

機械化で試したコードは、他の2つのコードスニペットとは異なる方法で認証しようとしている可能性があります。だから問題は、どのようにして同じ認証プロセスが機械化で達成できるかということです。 私はPythonを使用しています。2.7.12

答えて

2

ヘッダーはブラウザではなく要求に追加されているはずです。実際、ブラウザ変数は必要ない。

import mechanize, urllib 
from base64 import b64encode 

b64login = b64encode('%s:%s' % (user, pass)) 

request = mechanize.Request(url) 
request.add_header('Authorization', 'Basic %s' % b64login) 
response = mechanize.urlopen(request, data=urllib.urlencode({'a':'whatever'})) 
関連する問題