我想使用mediawiki api注册用户,我想使用curl来进行api调用,我试过
function RegisterCurl()
{
// is cURL installed yet?
if (!function_exists('curl_init')){
die('Sorry cURL is not installed!');
}
//$url = 'http://localhost/WC/gccfwiki/api.php';
$myvar1 = "createaccount";
$myvar2 = "http://localhost/WC/gccfwiki/";
$myvar3 = $this->GetToken;
// $remove = '+\\';
// $myvar3 = str_replace($remove,"",$myvar3);
$myvar4 = "Bob";
$myvar5 = "ExamplePassword";
$myvar6 = "ExamplePassword";
$myvar7 = "midaj@gmail.com";
$myvar8 = "Robert20Example";
$myvars = 'action=' . $myvar1 . '&createreturnurl=' . $myvar2 . '&createtoken=' . $myvar3 . '&username=' . $myvar4. '&password=' . $myvar5 . '&retype=' . $myvar6 . '&email=' . $myvar7 . '&realname=' . $myvar8;
$url = 'http://localhost/WC/gccfwiki/api.php';
$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 25);
curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
$output = curl_exec($ch);
var_dump($output);
die();
// Close the cURL resource, and free system resources
curl_close($ch);
return $output;
}
public function GetToken()
{
$url = 'http://localhost/WC/gccfwiki/api.php?action=query&format=json&meta=tokens&type=csrf|createaccount';
$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
$output = curl_exec($ch);
$out=json_decode($output);print_r($out);die();
$token = $out->query->tokens->createaccounttoken;
return $token;
}
我收到了回复 { "错误":{ "代码":" badtoken", " info":"无效的CSRF令牌。", " *":"有关API使用情况,请参阅http://localhost/WC/gccfwiki/api.php。订阅< https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce>的mediawiki-api-announce邮件列表;关于API弃用和重大变更的通知。" } }
有什么解决方案..我怎么解决它?
答案 0 :(得分:0)
您需要先使用https://www.mediawiki.org/w/api.php?action=query&meta=tokens&type=createaccount之类的电话从维基中获取令牌,另请参阅https://www.mediawiki.org/wiki/API:Account_creation
这取决于您使用的mediawiki版本。
答案 1 :(得分:0)
最好的答案是“不要”(你通过使用手工制作的卷曲查询而不是现有的client libraries来为自己设置很多痛苦,但如果你真的坚持,请使用cookiefile / cookiejar curl选项用于保存会话。