python两步登录

时间:2017-11-18 11:10:51

标签: python login

我想在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,因为我非常确定我提供了正确的凭据吗?

1 个答案:

答案 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:

如果出现任何问题,请在此留言。