【发布时间】:2019-02-01 01:27:25
【问题描述】:
我有一个 Tableau 10.0 服务器。我在https://example.com/views/SomeReport/Totals 有一个看法。在浏览器中,如果我导航到https://example.com/views/SomeReport/Totals.csv,系统会提示我登录,然后将视图下载为 csv 文件。
我正在尝试使用 python 下载相同的文件
详情
- 画面 10.0
- python 2.7
- 在 Windows 上运行的画面
- python 在 mac OSX El 上运行
这是我尝试过的:
tableau_file_path = '{tableau_path}{tableau_view}{file_ext}'.format(**cur_file)
local_path = cur_file['local_path']
user = 'xxxx'
password = 'xxxx'
# print tableau_file_path # outputs https://example.com/views/SomeReport/Totals.csv
# print local_path # outputs ../generated_resources/Some Folder Name/Totals.csv
r = requests.get(tableau_file_path, auth=HTTPBasicAuth(user, password), stream=True, timeout=5)
# also tried auth=(user, password)
print r.status_code # outputs 401
if r.status_code == 200:
with open(local_path, 'wb') as f:
f.write(r.content)
我觉得这应该工作,但它没有。我得到401 的状态
如果我从路径中删除 .csv,它会起作用,并且我会得到实际的画面仪表板页面。但我需要 csv 文件而不是 tableau 仪表板中的 html
我直接从我的代码中复制了用户名和密码,并将它们粘贴到我的浏览器中弹出的表单中,并且凭据工作似乎排除了错误凭据的问题。
这适用于普通网页,但在点击 url 提示文件下载时不起作用。如何通过文件下载实现此功能?
注意我对使用 python 下载文件的其他方法持开放态度
【问题讨论】:
-
状态码 401 表示未经授权(身份验证失败时也是如此)...您确定用户名和密码正确吗?
-
@jatinderjit 肯定的,我直接从代码中复制它们并粘贴到网络表单中,直接进入,没问题
-
您可以使用 Chrome 或 Firefox 中的 DevTools 来查看浏览器向服务器发送的内容。也许它会发送外部数据、cookie、加密密码等。
-
@furas 我在开发工具中看不到它,因为它下载的文件不是实际页面,但这让我思考。如果我从路径中删除
.csv,它会起作用并且我会得到实际的页面。但我需要的不是表格仪表板中的 html 文件 -
@DelightedD0D
HTTP live headers是不错的工具,但如果您不先注销,它不会显示信息。
标签: python python-requests basic-authentication tableau-api