pythonauth返回401

pythonauth返回401,python,python-3.x,authentication,Python,Python 3.x,Authentication,我有一个python脚本,可以从相机下载快照。我使用auth登录到相机。对于旧式相机,它工作时没有问题,而对于新相机则没有问题。我已经通过从python脚本复制它们来测试了链接和凭据,以确保它们正常工作,但我仍然无法登录,也不知道为什么。注释过的url就是有效的url。uniview没有。我已经用正确的密码替换了密码,我还测试了Chromium中的链接,它可以正常工作 import requests #hikvision old cameras #url = 'http://192.168.1

我有一个python脚本,可以从相机下载快照。我使用auth登录到相机。对于旧式相机,它工作时没有问题,而对于新相机则没有问题。我已经通过从python脚本复制它们来测试了链接和凭据,以确保它们正常工作,但我仍然无法登录,也不知道为什么。注释过的url就是有效的url。uniview没有。我已经用正确的密码替换了密码,我还测试了Chromium中的链接,它可以正常工作

import requests

#hikvision old cameras
#url = 'http://192.168.100.110/ISAPI/Streaming/channels/101/picture'

#uniview
url = 'http://192.168.100.108:85/images/snapshot.jpg'

r = requests.get(url, auth=('admin','password'))

if r.status_code == 200:
    with open('/home/pi/Desktop/image.jpg', 'wb') as out:
        for bits in r.iter_content():
            out.write(bits)
else:
    print(r.status_code)
    print(r.content)
下面是我得到的答复

b'{\r\n"Response": {\r\n\t"ResponseURL": "/images/snapshot.jpg",\r\n\t"ResponseCode": 3,\r\n \t"SubResponseCode": 0,\r\n \t"ResponseString": "Not Authorized",\r\n\t"StatusCode": 401,\r\n\t"StatusString": "Unauthorized",\r\n\t"Data": "null"\r\n}\r\n}\r\n'

因此,看起来像是
hikvisio
正在使用,而
uniview
正在使用,因此根据您需要将请求更改为:

from requests.auth import HTTPDigestAuth
r = requests.get(url, auth=HTTPDigestAuth('admin','password'))

请添加响应头{'Content-Length':'222','Content-Type':'text/plain','Connection':'close','WWW-Authenticate':'Digest realm=“e4f14c21fce9”,nonce=“40979f50366f57ba45ebdc753f76e9”,stale=“false”,algorithm=“MD5”,qop=“auth”,'X-Frame-Options':'SAMEORIGIN'}为了安全起见,我修改了nonce。不确定它是否与诊断有关。我试过了,但它告诉我HTTPDigestAuth没有定义。我正在使用Thonny python编辑器3.2.6。它报告使用的是Python 3.7.3,可能是您没有导入它,或者使用的是旧的
requests
版本