如何使用Python脚本调用requests模块实现Magento账户登录
可按以下步骤排查调整:
- 补全BeautifulSoup初始化逻辑
你当前代码直接调用soup.find但未将首页请求返回的HTML内容解析为Bs4对象,会导致form_key取值错误,需先导入依赖并完成解析:from bs4 import BeautifulSoup # 放在html_data请求完成之后 soup = BeautifulSoup(html_data.text, 'html.parser') - 补充完整请求头参数
Magento登录接口会校验请求头合法性,必须包含以下字段:headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Referer': 'https://<redacted.tld>/en/customer/account/login/', 'Content-Type': 'application/x-www-form-urlencoded', 'Origin': 'https://<redacted.tld>' } - 调整form_key获取地址
部分Magento站点首页生成的form_key和登录接口不通用,建议将首次GET请求的地址改为登录页地址,不要从首页取form_key:login_page_url = 'https://<redacted.tld>/en/customer/account/login/' html_data = s.get(login_page_url, headers=headers, timeout=(30, 30), verify=dst_verify_ssl) - 校验请求返回结果定位问题
登录请求完成后打印返回内容,可直接定位失败原因:print(login_req.status_code) print(login_req.text) # 可搜索返回内容中是否存在"form_key is invalid"、"Invalid login or password"、"captcha"等关键字 - 修正地址拼接逻辑
避免手动拼接地址出现双斜杠错误,可使用urljoin处理:from urllib.parse import urljoin login_post_url = urljoin(l_url, l_route) login_req = s.post(login_post_url, headers=headers, data=login_payload)
内容的提问来源于stack exchange,提问作者Mercer
相关产品推荐
相关产品推荐

