【问题标题】:Request http data that requires password authentication请求需要密码认证的http数据
【发布时间】:2014-10-24 15:13:32
【问题描述】:

如果有更简单、更简洁的方法,请告诉我。我正在尝试复制此调用:

curl -s -u user -k "https://10.10.10.10:8001/h/data/ps4"

此调用需要密码。为了模仿这一点,我所做的是:

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
top_level_url = "https://10.10.10.10:8001"
password_mgr.add_password(None, top_level_url, 'user', 'pass')
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(urllib2.HTTPHandler, handler)
request = urllib2.Request('https://10.10.10.10:8001/h/data/ps4')
print urllib2.urlopen(request).read()

但是,这似乎不起作用,因为我得到了:

File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) urllib2.HTTPError: HTTP Error 401: Unauthorized

curl 命令的输出返回一个字符串列表(例如,["a","b","c"])——理想情况下,我想以某种方式将其存储到 python 列表中,但我无法超越第一位。 我做错了什么?

【问题讨论】:

  • 是的。使用请求库。 docs.python-requests.org/en/latest
  • 与@VincentBeltman 相同,Python 的 HTTP 处理级别相当低。您希望在大多数情况下使用 3rd 方模块。
  • “清洁工”是相当主观的。我建议我们以基于意见的方式关闭它。已标记。
  • @DanielAmaya - 你读过这个问题吗?
  • @DanielAmaya - 不,您没有阅读我的问题。问题本身与我在问题正文中的第一个陈述无关。在标记之前阅读第一行。

标签: python curl httprequest


【解决方案1】:

如果你想使用requests 库,你可以这样做(来自documentation):

>>> from requests.auth import HTTPBasicAuth
>>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
<Response [200]>

关于requests如何进行身份验证here有更详细的文章。

【讨论】:

  • 我很欣赏这一点 - 但是我不确定如何通过这个在我的 curl 调用中复制 -k 参数? 编辑 sike,找到它:verify=False
  • 所以,这似乎有效,但是当我尝试print r.text 时,它只是空白......但是print r 相当于你的,r.status_code 也是 200。
  • 返回什么类型的数据?你可以试试r.content (binary data) 或r.json() 如果是json response
  • r.content 也是空白的 - 它应该只返回像 ["a","b","c"] ["d","e","f"] 这样的字符串列表
  • 没关系 - 看来我们的服务已关闭,没有人注意到。 curl 现在也不工作了。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2020-08-08
  • 2020-07-24
  • 1970-01-01
相关资源
最近更新 更多