测试请求身份验证

2024-04-24 12:01:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个功能,从我们公司的存储库下载文件,一切正常,问题是,当一个不正确的用户名或密码插入它没有通知我,它只是下载一个0 KB的文件,并失败时,试图提取它。 有没有办法确保密码/用户名是正确的?或者至少知道,当一个错误发生时,是因为这个?你知道吗

这是一个函数,它是带有tkinter GUI的较大脚本的一部分。你知道吗

def download_file(dl_url, local_save_path):
    dnl_sum = 1024
    local_filename = dl_url.split('/')[-1]
    complete_name = os.path.join(local_save_path, local_filename)
    # Get file size
    r = requests.head(dl_url, auth=(username.get(), password.get()), verify=False)
    try:
        dl_file_size = int(r.headers['content-length'])
        file_size.set(str(int(int(r.headers['content-length']) * (10 ** -6))) + "MB")
        c = 1
    except KeyError:
        c = 0
        pass
    r = requests.get(dl_url, stream=True, auth=(username.get(), password.get()), verify=False)
    while True:
        try:
            with open(complete_name, 'wb') as f:
                for chunk in r.iter_content(chunk_size=1024):
                    if chunk:  # filter out keep-alive new chunks
                        f.write(chunk)
                        f.flush()
                        if c == 1:
                            download_perc.set(percentage(dl_file_size, dnl_sum))
                        elif c == 0:
                            print(dnl_sum)
                        dnl_sum = os.path.getsize(complete_name)
        except FileNotFoundError:
            continue
        break

Tags: 文件pathnameurlsizegetlocalcontent
1条回答
网友
1楼 · 发布于 2024-04-24 12:01:55

在下载之前,您需要验证是否得到了200ok的响应。如果发送了错误的用户名或密码,服务器可能会用403(禁止)或401(未经授权)状态码来响应。你知道吗

您可以检查^{} attribute

if r.status_code == 200:
    # successful, download response to a file

或者可以显式测试40x代码:

if r.status_code in (401, 403):
    # access denied, handle this and don't download

或者,如果响应代码不成功,可以通过调用^{} method请求响应对象引发异常:

r.raise_for_status()  # raises exception if a 4xx or 5xx status was returned

请参见快速启动文档中的Response Status Codes。你知道吗

相关问题 更多 >