Python /请求:正确的登录返回401未授权

时间:2016-08-28 19:49:40

标签: python python-requests

我有一个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

奇怪的是,这并不总是发生。对于具有相同凭据的同一主机,它会随机失败/成功。

登录是正确的,并且在我的浏览器中完美运行。我不是蟒蛇忍者。有线索吗?

1 个答案:

答案 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
相关问题