非API方式用Python Requests登录Instagram遇403错误求助
解决Instagram登录返回403的问题
我之前也踩过Instagram登录返回403的坑——Instagram的反爬机制现在对非浏览器请求限制非常严,光靠账号密码和基础UA完全不够。结合我的经验,你需要补充几个关键步骤来模拟真实浏览器的请求流程:
1. 必须先获取CSRF令牌
Instagram在登录时要求携带csrfmiddlewaretoken,这个令牌需要先访问主页才能拿到(存在页面的隐藏表单和Cookie里)。直接请求登录接口肯定会被拦截。
2. 完善请求头字段
除了User-Agent,还需要添加Referer、X-Requested-With等字段,让请求看起来更像浏览器发起的AJAX请求。
3. 正确构造登录表单数据
表单里除了用户名和密码,必须包含刚才获取的CSRF令牌,部分场景下还需要额外的设备标识参数。
修改后的完整代码示例
import requests from bs4 import BeautifulSoup # 基础配置 main_url = 'https://www.instagram.com/' login_url = main_url + 'accounts/login/ajax/' user_agent = 'Mozilla/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25' # 初始化会话 session = requests.session() session.headers.update({ "User-Agent": user_agent, "Referer": main_url, "X-Requested-With": "XMLHttpRequest" }) # 第一步:访问主页获取CSRF令牌和Cookie response = session.get(main_url) soup = BeautifulSoup(response.text, 'html.parser') csrf_token = soup.find('input', {'name': 'csrfmiddlewaretoken'})['value'] # 第二步:构造登录数据 login_data = { 'username': '你的Instagram账号', 'password': '你的密码', 'csrfmiddlewaretoken': csrf_token } # 第三步:发送登录请求(允许重定向) login_response = session.post(login_url, data=login_data, allow_redirects=True) # 验证登录结果 if login_response.status_code == 200: response_json = login_response.json() if response_json.get('authenticated'): print("✅ 登录成功!") # 可以进一步验证,比如访问个人主页 profile_res = session.get(f"{main_url}你的用户名/") if profile_res.status_code == 200: print("✅ 已成功访问个人主页") else: print(f"❌ 登录失败:{response_json.get('message')}") else: print(f"❌ 请求失败,状态码:{login_response.status_code}") print(login_response.text)
额外注意事项
- 不要频繁请求:Instagram会检测请求频率,短时间内多次尝试会直接封禁IP,建议每次请求后加1-2秒延时。
- 设备标识参数:如果还是返回403,可以尝试添加
device_id参数到表单或请求头,你可以生成一个固定的UUID作为设备ID。 - 代理IP:如果你的IP已经被封禁,需要切换代理继续测试。
- Cookie持久化:登录成功后可以保存session的Cookie,后续请求直接复用,避免重复登录触发拦截。
内容的提问来源于stack exchange,提问作者redraven
相关产品推荐
相关产品推荐

