PHP使用cURL登录网站

时间:2012-12-07 05:51:20

标签: php curl

我正在尝试登录网站使用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;

1 个答案:

答案 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