我想在python脚本中从仪表板环境下载文件并操纵文件中的数据。仪表板环境需要我登录两次。我首先需要登录公司帐户,然后登录个人帐户。我可以登录公司帐户,但是当我提供正确的凭据时登录我的个人帐户失败。
这是我正在尝试使用的脚本。由于隐私原因,明星之间的东西发生了变化:
import csv
import requests
URL_Login = '*baseurl of the dashboard*'
CSV_URL = '*baseurl of the dashboard*/auto/reports/responses/?sheet=1528&item=4231&format=csv'
with requests.Session() as s:
download = s.get(URL_Login, auth=("*corporate account name*", "*corporate password*"))
download = s.get(CSV_URL, auth=("*personal account name*", "*personal password*"))
decoded_content = download.content.decode('utf-8')
cr = csv.reader(decoded_content.splitlines(), delimiter=',')
my_list = list(cr)
for row in my_list:
print(row)
我收到以下错误消息: 401 - 未授权:由于凭据无效,访问被拒绝。 您无权使用您提供的凭据查看此目录或页面。
可以通过其他任何方式触发401,因为我非常确定我提供了正确的凭据吗?
答案 0 :(得分:0)
要让页面处理第一个请求,请在第二个下载语句之前尝试一个计时器:下载s.get ...,像time.sleep(3)一样等待3秒钟(将其延长到最大值如果3秒不起作用,则通过反复试验7秒)。首先导入时间。
它仍然不起作用,这意味着你的request.Session()需要再次调用,所以试试:
import csv
import requests
URL_Login = '*baseurl of the dashboard*'
CSV_URL = '*baseurl of the dashboard*/auto/reports/responses/?sheet=1528&item=4231&format=csv'
with requests.Session() as s:
download = s.get(URL_Login, auth=("*corporate account name*", "*corporate password*"))
time.sleep(3)
with requests.Session() as t:
download = t.get(CSV_URL, auth=("*personal account name*", "*personal password*"))
decoded_content = download.content.decode('utf-8')
cr = csv.reader(decoded_content.splitlines(), delimiter=',')
my_list = list(cr)
for row in my_list:
print(row)
......第三个干预,如果第二个干预也不起作用,就是回到原始代码,并将其添加到'with requests.Session()as s:'行,以便Cookie仍然存在,正如第一个答案here所建议的那样:
with requests.Session(config={'verbose': sys.stderr}) as s:
如果出现任何问题,请在此留言。