【问题标题】:How to get JSON into Pandas dataframe with windows authentication如何通过 Windows 身份验证将 JSON 导入 Pandas 数据框
【发布时间】:2018-12-13 22:15:00
【问题描述】:

我正在尝试使用 read_json 函数从使用 Windows 身份验证的 Intranet 站点将 json 读取到 Pandas 数据帧中,但出现 401 错误。

一点谷歌搜索表明,使用 Fiddler 的“自动授权”功能解决了邮递员读取 windows 身份验证 json 的类似问题,但它似乎不适用于使用 anaconda 的熊猫。

import pandas as pd
df = pd.read_json(windows authenticated url)

顺便说一句,url 工作得很好,它在浏览器中返回了一个格式完美的 json。

谢谢

【问题讨论】:

  • 你能给出一个可访问的 url 示例吗?
  • 可访问的网址是什么意思?它只是一个 url,例如 "intranetsitecom/mydata" 。它返回 json。

标签: python pandas


【解决方案1】:
  • 您的公司 Intranet 上的 URL 是否存在?
  • 您是否通常在浏览器中输入它,然后它会暂停 10 秒,然后您会在没有任何密码提示的情况下获得结果?

    如果上述情况属实,则很可能使用了 Kerberos 身份验证。您当然可以使用 python 获得它。使用这里的包可以帮助你解决这个问题https://github.com/requests/requests-kerberos

    请注意,某些语言环境维护自己的 HTTP/Kerberos 堆栈 (Java),因此您需要单独登录到 Active Directory 域,而不是您的操作系统登录。

【讨论】:

  • 对你的两个问题都是肯定的,但我刚刚用 fiddler 测试了一个 Intranet url,看来我们正在使用 NLTMSSP。它实际上并不需要 10 秒,因为它几乎是即时的。有 nltm 的库吗?
  • 有 NTLM 请求库 github.com/requests/requests-ntlm 。我很惊讶你在 2018 年使用 NTLM。这些天真的不安全。
  • 它与 fiddler 无缝工作的原因是因为 fiddler 可能使用了 WinHTTP 库。该库与操作系统紧密集成,因此它继承了所有 Windows 身份验证机制
  • 您也可以使用stackoverflow.com/questions/14417539/… 技术从 python 中使用 WinHTTP。您将失去 requests 库提供的所有好处,但将获得无缝身份验证
【解决方案2】:

我建议首先使用requests 包进行HTTP GET 请求。该包提供了一个get() 方法,它允许authentication 以及一个json() 方法,它返回响应的json 编码内容。代码示例可能如下所示:

import requests    

r = requests.get('https://intranet.jsondata.com/xy.json', auth=('user', 'pass'))
json_content = r.json()

【讨论】:

  • 它似乎仍然无法进行身份验证,并且有点谷歌搜索表明我可能不得不使用 requests_nltm。另一个问题是我真的不想把我的用户名和密码放在 jupyter 笔记本上。我将尝试使用 nltm 库。谢谢
  • 更新:我能够让它与 requests_nltm 库一起使用,但现在的问题是如何将其转换为 pandas 数据框?
  • 你使用这个包github.com/requests/requests-ntlm吗?然后您应该能够为您的 json 文件发出 GET 请求并将响应读入 pandas(就像在您的 OP 中一样)。你有错误吗?
  • 是的,将响应直接读入 read_json 会引发错误,即使我使用 response.json() 然后将其发送到 read_json 它仍然会引发错误。
  • 更新:实际上只是将它传递给 pd.DataFrame(response.json()) 有效。谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
相关资源
最近更新 更多