【问题标题】:Custom opener or Request headers自定义开瓶器或请求标头
【发布时间】:2015-08-21 01:18:35
【问题描述】:

我正在尝试在 Python 脚本中复制 wget 命令。 wget 命令遵循以下原则:

wget --user user --password pass http://serveraddress/

仅供参考,您可以猜到,这是一个简单的强制性身份验证。系统会提示您输入用户名和密码的弹出表单。因此,除非您输入凭据,否则您无法访问该地址。
在我的脚本中,我提示用户输入他的用户名和密码并存储它们。到目前为止,一切都说得通。然而,在这之后,我真的很困惑。 原因是我通常在网上阅读了两篇不同的内容,实际上是在 Python Essential Reference 中关于 urllib2.urlopen() 的内容(仅供参考,我只能使用标准库;所以 requests 对我来说不是一个选项)。
因此,PER 说“基本的 urlopen() 函数不支持身份验证、cookie 或 HTTP 的其他高级功能。要添加支持,您必须使用 build_opener() 函数创建自己的自定义开启器对象。” 其他人,例如here,说您需要创建一个 Request 对象并向其添加标头。 那么,我在这里缺少什么?非常感谢任何帮助。

【问题讨论】:

    标签: python


    【解决方案1】:

    使用requests 包。实际上,您的问题是他们在文档中引用的第一个示例:

    r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
    

    但是,如果您绝对不能使用requests,作者方便地描述了如何使用urllib2 中的等效功能。转到requests documentation page,点击“See similar code, without Requests”,然后从那里窃取 urllib2 代码。

    【讨论】:

    • 正如我在问题中提到的,恐怕我必须使用标准库。因此,请求不是一种选择。 :(
    • 在这种情况下,转到requests 文档页面,单击“查看similar code, without Requests”,然后从那里窃取urllib2 代码。
    • 谢谢。我会这样做的。
    • @Robᵩ,是否可以为 auth 变量使用自定义开启器?我正在尝试将HTTP PUT 文档发送到共享点站点,并且由于共享点的令牌系统,usernamepassword 模块无法正常工作。任何提示将不胜感激。
    • 抱歉,@NickBraunagel,我对 NTLM 或 Sharepoint 一无所知。如果您还没有,我建议您将程序缩减为 minimal reproducible example 并将其作为新问题发布。
    猜你喜欢
    • 2023-03-21
    • 2014-08-08
    • 2016-06-24
    • 2013-11-13
    • 2014-08-13
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多