【问题标题】:Python mechanize implementation of HTTP Basic AuthHTTP Basic Auth 的 Python 机械化实现
【发布时间】:2016-12-01 20:12:16
【问题描述】:

我可以使用请求获得 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'}))

问题是当我尝试使用 mechanize 进行相同操作时出现未经授权的错误:

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

我尝试使用 mechanize 的代码可能会尝试以与其他两个代码 sn-ps 不同的方式进行身份验证。所以问题是如何在机械化中实现相同的认证过程。 我正在使用 python 2.7.12

【问题讨论】:

    标签: python-2.7 http-auth


    【解决方案1】:

    标头应该被添加到请求而不是浏览器中。事实上,甚至不需要 browser 变量。

    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'}))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 2011-05-13
      • 1970-01-01
      相关资源
      最近更新 更多