Python requests缺少curl具备的功能吗?同接口curl正常requests返回404
问题原因
- 端口未正确指定:PHP代码中通过
CURLOPT_PORT => 3456显式指定了请求端口为3456,实际请求的目标地址是https://aartre.com:3456/user/login,但Python代码中URL没有携带端口,默认走HTTPS标准443端口请求,自然找不到对应接口返回404。 - POST参数未完成插值:Python代码中定义data的字符串没有加
f前缀,不会自动替换{email}和{password}为实际变量值,提交的参数是无效的原始模板字符串。 - 可选配置对齐:PHP开启了
CURLOPT_FOLLOWLOCATION自动跟随重定向,可在Python请求参数中显式加allow_redirects=True对齐配置,避免特殊场景跳转失效。
修正后的Python代码
import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning s = requests.Session() requests.packages.urllib3.disable_warnings(InsecureRequestWarning) headers = { "Connection":"keep-alive", "User-Agent":"Mozilla/5.0 (Linux; Android 10; M2006C3LG Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.101 Mobile Safari/537.36", "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8", "Accept-Encoding":"gzip, deflate" } def post(url, data): return s.post(url, data=data, headers=headers, verify=False, allow_redirects=True) def login(email, password): # 补上3456端口 url = "https://aartre.com:3456/user/login" # 加f前缀完成变量插值 data = f"email={email}&password={password}" res = post(url, data) print(res.json()) email = "email@gmail.com" password = 'password' login(email, password)
内容的提问来源于stack exchange,提问作者mbithi
相关产品推荐
相关产品推荐

