$ch=curl_init();
$postfield = "action=login&lgname=d&lgpassword=Password&format=json";
$url = "http://wiki.signa.com/api.php"; //url to wiki's api
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfield);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = json_decode(curl_exec($ch));
curl_close($ch);
print_r($output);
$token = $output->login->token;
$session = $output->login->sessionid;
$ch=curl_init();
$postfield = "action=login&lgname=d&lgpassword=Password&lgtoken={$token}";
$url = "http://wiki.signa.com/api.php"; //url to wiki's api
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfield);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
print_r($output);
die;
通过第一个请求,我得到了这个对象:
stdClass Object
(
[login] => stdClass Object
(
[result] => NeedToken
[token] => ad61fadb829e5cd44b0062463b7cc2d2
[cookieprefix] => wikisign_mediawiki
[sessionid] => ebb892881eed27554161234916d00480
)
)
我正在使用令牌进行第二次请求,但我得到了 result = NeedToken. 应该是成功的,因为我现在正在发送令牌。
我注意到文档说:
使用 POST 发送登录请求,正文中包含确认令牌,
enwiki_session
标头中包含从先前请求返回的会话 cookie(例如 )。
我对此并不完全清楚。我假设我遇到了问题,因为我没有在标题中发送会话 cookie。我需要在第二个请求之前设置一个 cookie 吗?