PYTHON:请求和响应401

PYTHON:请求和响应401,python,python-3.x,Python,Python 3.x,我在身份验证方面有点问题。我正在编写一个脚本,从用户处获取登录名和密码(从键盘输入),然后我想从网站上获取一些数据(http而不是https),但每次运行脚本时,响应都是401。我从stack中阅读了一些类似的帖子,并尝试了以下解决方案: 解决方案1 c = HTTPConnection("somewebsite") userAndPass = b64encode(b"username:password").decode("ascii") headers = { 'Authorization'

我在身份验证方面有点问题。我正在编写一个脚本,从用户处获取登录名和密码(从键盘输入),然后我想从网站上获取一些数据(http而不是https),但每次运行脚本时,响应都是401。我从stack中阅读了一些类似的帖子,并尝试了以下解决方案:

解决方案1

c = HTTPConnection("somewebsite")
userAndPass = b64encode(b"username:password").decode("ascii")
headers = { 'Authorization' : 'Basic %s' %  userAndPass }
c.request('GET', '/', headers=headers)
res = c.getresponse()
data = res.read()
解决方案2

with requests.Session() as c:
    url = 'somewebsite'
    USERNAME = 'username'
    PASSWORD = 'password'
    c.get(url)
    login_data = dict(username = USERNAME, password = PASSWORD)
    c.post(url,data = login_data)
    page = c.get('somewebsite', headers = {"Referer": "somwebsite"})
    print(page)
解决方案3

www = 'somewebsite'
value ={'filter':'somefilter'}
data = urllib.parse.urlencode(value)
data=data.encode('utf-8')
req = urllib.request.Request(www,data)
resp = urllib.request.urlopen(req)
respData = resp.read()
print(respData)
x = urllib.request.urlopen(www,"username","password")
print(x.read())'
我不知道如何解决这个问题。有人能给我一些链接或提示吗

您是否尝试过请求中的示例

>>> from requests.auth import HTTPBasicAuth
>>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
<Response [200]>
>>from requests.auth import HTTPBasicAuth
>>>请求。获取('https://api.github.com/user,auth=HTTPBasicAuth('user','pass'))

我可以知道网站上的身份验证类型吗

这是一个官方的基本身份验证示例()


要将api与身份验证一起使用,我们需要具有令牌id或应用程序id,以便为我们的请求提供访问权限。下面是一个示例,我们如何制定url并获得响应: strong文本

import requests
city = input()
api_call = "http://api.openweathermap.org/data/2.5/weather?"
app_id = "892d5406f4811786e2b80a823c78f466"
req_url = api_call + "q=" + city + "&appid=" + app_id
response = requests.get(req_url)
data = response.json()
if (data["cod"] == 200):
    hum = data["main"]["humidity"]
    print("Humidity is % d " %(hum))
elif data["cod"] != 200:
    print("Error occurred : " ,data["cod"], data["message"])

您的用户名或密码可能不正确,因为它可能正在读取错误代码401,这意味着HTTP 401未经授权的客户端错误状态响应代码,因此您可能未经授权登录当我打开网站时,我认为浏览器和我写下我的密码并登录没问题,但是,当我从cmd运行此命令时,我会在浏览器的开发人员工具中跟踪请求,以了解它在做什么。如果基本的身份验证示例都不起作用,那一定是其他原因。@MB_YD嘿,你有什么办法吗?我也遇到了同样的情况。是的,但是401:(我检查过了,它是:NTLM你能使用chrome开发者工具吗?它提供你跟踪请求头。这可能会有帮助:
import requests
city = input()
api_call = "http://api.openweathermap.org/data/2.5/weather?"
app_id = "892d5406f4811786e2b80a823c78f466"
req_url = api_call + "q=" + city + "&appid=" + app_id
response = requests.get(req_url)
data = response.json()
if (data["cod"] == 200):
    hum = data["main"]["humidity"]
    print("Humidity is % d " %(hum))
elif data["cod"] != 200:
    print("Error occurred : " ,data["cod"], data["message"])