2016-12-01 39 views
2

我能得到HTTP基本身份验证使用要求的工作:Python的机械化实现HTTP基本的身份验证

import requests 
request = requests.post(url, auth=(user, pass), data={'a':'whatever'}) 

而且还使用的urllib2和urllib的:

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 

我尝试机械化的代码可能试图以不同于其他两个代码片段的方式进行身份验证。所以问题是如何在机械化中实现相同的认证过程。 我正在使用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'}))