如何使用卷轴与MediaWiki API进行注册

时间:2017-10-14 07:16:37

标签: mediawiki

我想使用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&gt的mediawiki-api-announce邮件列表;关于API弃用和重大变更的通知。"     } }

有什么解决方案..我怎么解决它?

2 个答案:

答案 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选项用于保存会话。