如何让Node.js中Axios请求toloka.to的效果与Python Requests一致?
我是toloka.to注册用户,尝试向https://toloka.to/login.php发送携带必要参数的POST请求,以获取后续可用的关键Cookie,但遇到了跨语言实现的不一致问题。
Python Requests实现结果
使用Python Requests库可以成功完成登录,返回的HTML包含登录用户专属元素,获取到的Cookie如下:
{'toloka_1218067_tt': '1708023715', 'toloka_1218067_f': 'a%3A0%3A%7B%7D', 'toloka_1218067_uf': '0', 'toloka_1218067_u': 'a%3A0%3A%7B%7D'}
对应的实现代码:
import requests session = requests.Session() login = session.post( f"https://toloka.to/login.php", { "username": "SomeUser", "password": "SomePassword", "autologin": "on", "ssl": "on", "login": "Вхід", }, ) print(login.cookies.get_dict()) getDataWithCredential = session.get( f"https://toloka.to/tracker.php?nm=frieren" ) with open('xd.html', 'w', encoding='utf-8') as file: file.write(login.text) with open('xd2.html', 'w', encoding='utf-8') as file: file.write(getDataWithCredential.text)
Node.js Axios实现结果
使用Node.js Axios发送相同逻辑的请求时,得到的Cookie如下:
['toloka_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bi%3A-1%3B%7D; expires=Fri, 14-Feb-2025 19:29:42 GMT; Max-Age=31536000; path=/; secure; httponly', 'toloka_sid=c4ab745ccad638caadda384685c38e36; path=/; secure; httponly', 'toloka___lastvisit=1708025382; expires=Fri, 01-Jan-1971 00:00:00 GMT; Max-Age=-1676489382; path=/; secure', 'toloka___tt=1708025382; expires=Fri, 14-Feb-2025 19:29:42 GMT; Max-Age=31536000; path=/; secure', 'toloka___f=a%3A0%3A%7B%7D; expires=Fri, 14-Feb-2025 19:29:42 GMT; Max-Age=31536000; path=/; secure', 'toloka___uf=0; expires=Fri, 14-Feb-2025 19:29:42 GMT; Max-Age=31536000; path=/; secure', 'toloka___u=a%3A0%3A%7B%7D; expires=Fri, 14-Feb-2025 19:29:42 GMT; Max-Age=31536000; path=/; secure']
对应的实现代码:
const formData = new FormData(); formData.append('username', 'SomeUser'); formData.append('password', 'SomePassword'); formData.append('autologin', 'on'); formData.append('ssl', 'on'); formData.append('login', 'Логін'); const data = await axios.post('https://toloka.to/login.php', formData, { withCredentials: true }); const cookies = data.headers['set-cookie']; console.log(cookies); console.log(data.data);
关键问题点
- 浏览器登录后仅保留
toloka_sid即可正常发起请求,但Python实现中无此Cookie仍能正常工作 - Node.js实现中所有Cookie均无效,包括
toloka_sid - Python中的Cookie命名格式为
toloka_1218067_tt,Node.js中为toloka___tt,尝试将Node.js的Cookie后缀替换为对应数字后仍然无效
内容的提问来源于stack exchange,提问作者Bohdan
相关产品推荐
相关产品推荐

