使用Python requests模块登录Course Hero报错,求解决方案(仅学习用途)
问题排查&修复方案
现有代码的核心错误点
- 提交数据格式不匹配:你在请求头指定了
Content-Type: application/json,但代码里用data参数传参,requests会默认将其序列化为application/x-www-form-urlencoded格式,和头声明不一致,服务器无法正确解析提交的登录信息。 - 没有维持会话状态:直接用
requests.post发起请求不会自动保存登录返回的cookie凭证,哪怕登录成功,后续请求也无法带上身份信息,也没法验证登录状态。 - 缺少必要的csrf校验参数:Course Hero登录流程要求提交从登录页面获取的csrf令牌,你没有提前请求登录页提取该参数,提交的请求会被服务器直接拦截。
- 登录接口参数错误:你构造的
data参数字段不符合Course Hero登录接口的实际要求,额外传入的url、submit字段属于冗余无效字段,反而会导致请求校验失败。
修复后的可运行代码
import requests # 关闭SSL告警 requests.packages.urllib3.disable_warnings() # 初始化会话,自动维护cookie session = requests.Session() headers = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'accept': 'application/json, text/javascript, */*; q=0.01', 'x-requested-with': 'XMLHttpRequest', 'content-type': 'application/json', 'origin': 'https://www.coursehero.com', 'referer': 'https://www.coursehero.com/login/', } # 第一步:先请求登录页面,提取csrf令牌 login_page_resp = session.get('https://www.coursehero.com/login/', headers=headers, verify=False) # 从响应cookie中取csrf csrf_token = session.cookies.get('csrftoken') headers['x-csrftoken'] = csrf_token # 第二步:构造正确的登录参数 login_data = { 'email': '你的实际登录邮箱', 'password': '你的实际登录密码', 'remember': True } # 发起登录请求 login_resp = session.post( 'https://www.coursehero.com/api/connect/', headers=headers, json=login_data, # 用json参数自动序列化,匹配content-type声明 verify=False ) # 验证登录结果 resp_json = login_resp.json() if resp_json.get('success') == True: print("登录成功") # 后续请求直接用session.get/post即可带上身份凭证 else: print("登录失败,错误信息:", resp_json.get('message'))
额外注意事项
- 所有操作请严格遵守Course Hero的用户协议和robots规则,仅用于合法学习用途。
- 若登录触发人机验证,需要额外接入打码服务或手动处理验证码,无通用验证绕过方案。
内容的提问来源于stack exchange,提问作者Rohit joshi
相关产品推荐
相关产品推荐

