【问题标题】:What is the cleanest way to do HTTP POST with basic auth in Python?在 Python 中使用基本身份验证进行 HTTP POST 的最简洁方法是什么?
【发布时间】:2011-06-06 18:00:26
【问题描述】:

在 Python 中使用 Basic Auth 进行 HTTP POST 最简洁的方法是什么?

仅使用 Python 核心库。

【问题讨论】:

    标签: python http basic-authentication


    【解决方案1】:

    说真的,只需使用requests

    import requests
    resp = requests.post(url, data={}, auth=('user', 'pass'))
    

    这是一个纯python库,安装就像easy_install requestspip install requests一样简单。它有一个非常简单易用的 API,它修复了 urllib2 中的错误,因此您不必这样做。不要因为愚蠢的自我强加要求而让你的生活变得更艰难。

    【讨论】:

    • +1 请求,但不满足 OP 的要求(在 stdlib 中)
    • @Corey 确实,我的目的是让他改变他的要求。 Requests 修复了标准库的几个问题,更不用说它有一个更简单的 API。使用它无疑会让他的生活更轻松,并为他省去麻烦。
    • 同意。如果要求很灵活,我也会使用 requests
    • 是的,我知道请求。这很酷,但我不会在这里问是否可以足够容易地使用它。
    • @zeekay - IT 安全强加了软件审查要求(是的,这几乎是十年后的事了,但仍然适用)。有时候,自己动手比说服 30 个人签署某件事更容易,这听起来很可怕。
    【解决方案2】:

    Hackish 变通方法有效:

    urllib.urlopen("https://username:password@hostname/path", data) 
    

    很多人没有意识到在 URL 中指定用户名和密码的旧语法在 urllib.urlopen 中有效。用户名或密码似乎不需要任何编码,除非密码包含“@”符号。

    【讨论】:

      【解决方案3】:

      如果你定义了一个 url、用户名、密码和一些 post-data,这应该可以在 Python2 中工作......

      import urllib2
      
      passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
      passman.add_password(None, url, username, password)
      auth_handler = urllib2.HTTPBasicAuthHandler(passman)
      opener = urllib2.build_opener(auth_handler)
      urllib2.install_opener(opener)
      content = urllib2.urlopen(url, post_data)
      

      来自官方 Python 文档的示例显示 urllib2 中的基本身份验证: * http://docs.python.org/release/2.6/howto/urllib2.html

      使用 urllib2 进行基本身份验证的完整教程: * http://www.voidspace.org.uk/python/articles/authentication.shtml

      【讨论】:

      • 不是一篇好文章——它花了很多时间解释如何做到错误,然后才说“但忽略这一点,这里是如何做到正确”。 :-/
      猜你喜欢
      • 2011-03-06
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多