我正在尝试登录网站使用cURL我在这个网站上已经阅读了很多答案但仍然无法获得它。请有人帮我找到解决方案
$url = 'https://secure.chess.com/login';
$postfields = "c1=USERNAME&loginpassword=PASSWORD&rememberme=";
$cookie = "cookie.txt";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);
$response = curl_exec($ch);
echo $response;
答案 0 :(得分:1)
你似乎错过了很多帖子变量,其中一个重要的状态哈希值必须在发布之前获取:
c1:USERNAME
loginpassword:PASSWORD
Qform__FormControl:btnLogin
Qform__FormEvent:QClickEvent
Qform__FormParameter:
Qform__FormCallType:Server
Qform__FormUpdates:
Qform__FormCheckableControls:rememberme
Qform__FormState:9661e98ced2596072a3ca5d70cd57ff5
Qform__FormId:LoginForm
错误的Qform_FormState
绝对没有错误消息,这被证明是令人困惑的。您必须首先获取页面,从HTML中删除Qform_FormState
哈希并提交它。偶尔还会有c4
CAPTCHA字段。
我能够毫不费力地做到这一点:
curl https://secure.chess.com/login -v | grep -Po '(?<=Qform__FormState" value=").*(?=")'
# 9b6b7d849c1d4fa16ed25b7b886cf88b
# note Set-Cookie: PHPSESSID=vvtk4stb22e34ac7jhg7m6i142; path=/; domain=.chess.com
curl \
--header "Cookie: PHPSESSID=vvtk4stb22e34ac7jhg7m6i142" \
--data="c1=USERNAME&loginpassword=PASSWORD... *snip* ...&Qform__FormState=9b6b7d849c1d4fa16ed25b7b886cf88b ..." \
https://secure.chess.com/login -v