我有一个python应用程序通过基本HTTP身份验证登录到远程主机。 身份验证如下:
def make_authenticated_request(host, username, password):
url = host
r = requests.get(url, auth=(username, password))
r.raise_for_status()
return r
test = Looter.make_authenticated_request("http://" + host + "/status/status_deviceinfo.htm", user, password)
打印出此错误:
401 Client Error: Unauthorized for url
奇怪的是,这并不总是发生。对于具有相同凭据的同一主机,它会随机失败/成功。
登录是正确的,并且在我的浏览器中完美运行。我不是蟒蛇忍者。有线索吗?
答案 0 :(得分:2)
我可能会把它改写成这样的东西......不管你需要还是喜欢改变它。这里的要点是我使用会话并传递它以发出另一个请求。您可以重用该会话对象来发出其他请求。现在,如果您按照代码建议,每次都要进行大量请求。该网站可能会阻止您,这就是为什么会话更好,因为您不必继续授权。
import requests
class Looter(object):
def __init__(self):
self.s = None
def create_session(self, url, username, password):
# create a Session
s = requests.Session()
# auth in
res = s.get(url, auth=(username, password))
if res.status_code == 200:
self.s = s
def make_request(self, url):
self.s.get(url)
#do something with the requests
l = Looter()
l.create_session(url, username, password)
# print the session to see if it authed in
print l.s.status_code