如何用Python Requests无密码登录81端口的管理员账号?
无密码管理员账号登录解决方案
针对你遇到的requests库调用返回401状态码的问题,可尝试以下几种方案:
手动构造Basic Auth请求头
部分服务器对空密码的HTTP Basic Auth处理逻辑特殊,requests默认的auth参数会生成包含空密码的凭证,但服务器仅接受仅含用户名的凭证。你可以直接构造符合要求的请求头:import requests import base64 ip = "目标服务器IP" # 对"admin:"进行Base64编码(冒号后无内容) auth_encoded = base64.b64encode(b'admin:').decode('utf-8') custom_headers = {'Authorization': f'Basic {auth_encoded}'} session = requests.Session() response = session.get(url=f'http://{ip}:81', headers=custom_headers) print(response.status_code)自定义Auth处理类
继承requests的HTTPBasicAuth,重写凭证生成逻辑,仅传入用户名部分:import requests import base64 from requests.auth import HTTPBasicAuth class EmptyPassAuth(HTTPBasicAuth): def __call__(self, request): # 仅使用用户名构造认证字符串 auth_str = base64.b64encode(f'{self.username}:'.encode()).decode() request.headers['Authorization'] = f'Basic {auth_str}' return request session = requests.Session() response = session.get(url=f'http://{ip}:81', auth=EmptyPassAuth('admin', '')) print(response.status_code)排查是否为表单登录
若浏览器的登录是页面表单提交而非弹出的HTTP认证窗口,需找到登录接口的参数和地址,用POST请求提交用户名:import requests session = requests.Session() # 替换为实际的登录接口路径和表单参数 login_payload = {'username': 'admin'} # 先提交登录请求 session.post(f'http://{ip}:81/login', data=login_payload) # 再访问目标页面 response = session.get(f'http://{ip}:81') print(response.status_code)
内容的提问来源于stack exchange,提问作者MYRAmax
相关产品推荐
相关产品推荐

