【问题标题】:Authorization header in Requests package in pythonpython中Requests包中的授权标头
【发布时间】:2017-09-13 05:58:01
【问题描述】:

我正在尝试使用 requests 包编写 python 脚本,以使用组织内托管的在线 mongodb 查询服务 API。 API 需要格式为“网站名称/用户名:密码”并使用基本身份验证 base64 编码的授权标头。我尝试使用请求包创建 GET 请求,该包具有以下格式的授权标头:

import requests

headers = {'Authorization': 'Basic %s' % 'Base64encoded 
websitename/username:Password string here'}

content_res = requests.get(get_url, headers = headers).json()

但我在此处收到字符串的解析错误,因为我认为请求包中标头的预期字符串在此处采用“用户名:密码”的形式,而不是所需的格式,即“网站名/用户名:密码”。

有没有一种方法可以让我以服务期望的格式使用 base64 编码的字符串,即请求包中的“网站名称/用户名:密码”?

非常感谢任何帮助。

谢谢。

【问题讨论】:

    标签: python get python-requests


    【解决方案1】:

    在我看来,您收到了 HTTP 响应错误,因为您传递的授权标头值不是 base64 编码的。要纠正这个问题,您可以简单地使用 base64 python 模块对字符串进行编码:

    Python 2.7 https://docs.python.org/2/library/base64.html

    Python 3.5 https://docs.python.org/3.5/library/base64.html

    一个例子是这样的:

    import base64
    import requests
    
    website = 'example.com'
    username = 'root'
    password = '1234'
    auth_str = '%s/%s:%s' % (website, username, password)
    b64_auth_str = base64.b64encode(auth_str)
    
    headers = {'Authorization': 'Basic %s' % b64_auth_str}
    
    content_res = requests.get(get_url, headers=headers).json()
    

    【讨论】:

    • 非常感谢乔尼!这解决了我面临的问题:)
    • 嗨 Jonny,如果 auth_str 字符串中使用的斜杠是反斜杠怎么办。我试过了,但它给出了一个错误'需要像对象而不是 str'的字节。您认为此问题的任何解决方法?
    【解决方案2】:
    import base64
    import requests
    
    website = 'example.com'
    username = 'root'
    password = '1234'
    auth_str = '%s/%s:%s' % (website, username, password)
    b64_auth_str = base64.b64encode(auth_str.encode('ascii'))
    headers = {'Authorization': 'Basic %s' % b64_auth_str}
    content_res = requests.get(get_url, headers=headers).json()
    

    【讨论】:

    • 感谢您的回答,您介意对上面的代码 sn-p 添加一点解释吗?祝你有美好的一天。
    • 刚刚添加了编码部分,auth_str.encode(),在散列部分遇到了这个错误。希望它会帮助别人。
    猜你喜欢
    • 2012-08-12
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2018-04-01
    相关资源
    最近更新 更多