使用Python requests登录filelist.io失败,始终返回登录页面寻求技术支持
解决filelist.io登录失败问题
以下是导致登录失败的核心问题及修正方案:
1. POST请求目标URL错误
你的代码将登录数据提交到了browse.php,但filelist.io的登录请求实际需要提交到专门的登录接口(通常为takelogin.php)。可通过浏览器开发者工具查看登录表单的action属性确认这一点。
2. 缺少必要请求头
除User-Agent外,站点会验证Referer头,需添加该字段指定请求来源页面,否则服务器可能拒绝请求。
3. 未完整提取表单字段
部分站点登录表单包含validator之外的其他隐藏字段,仅提取单个字段可能导致参数缺失,建议批量提取表单内所有输入字段。
修正后的代码示例
import requests from bs4 import BeautifulSoup headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36', 'Referer': 'https://filelist.io/browse.php' } with requests.Session() as s: # 获取登录页面及表单数据 url = 'https://filelist.io/browse.php' r = s.get(url, headers=headers) soup = BeautifulSoup(r.content, 'html5lib') # 提取表单内所有输入字段 login_form = soup.find('form') login_data = {} for input_tag in login_form.find_all('input'): name = input_tag.get('name') value = input_tag.get('value', '') if name: login_data[name] = value # 填入账号密码 login_data['username'] = '你的用户名' login_data['password'] = '你的密码' login_data['returnto'] = '/browse.php' # 提交到正确的登录接口 login_url = 'https://filelist.io/takelogin.php' r = s.post(login_url, data=login_data, headers=headers) # 验证登录状态 check_url = 'https://filelist.io/browse.php' r = s.get(check_url, headers=headers) if 'logout' in r.text or '欢迎' in r.text: print('登录成功') else: print('登录失败,返回内容预览:') print(r.text[:500])
内容的提问来源于stack exchange,提问作者Robert Sofianu
相关产品推荐
相关产品推荐

