使用Mediawiki API扩展中的错误或无效令牌

时间:2014-04-26 23:57:57

标签: php curl mediawiki mediawiki-api

我正在尝试进行一个简单的扩展,在我的mediawiki网站上移动一个页面,但无论是使用curl还是FauxRequest,我总是会得到错误的令牌响应。尝试过urlencoding,而不是编码,转义,没有+ /等等并不重要。

代码看起来像目前正在使用FauxRequest,param1 / 2/3来自我正在创建的解析器函数。

global $wgRequest;
$token = $token = $wgUser->editToken();

$params = new FauxRequest( 
    array(
        'action'    => 'move',
        'from'      => $param1,
        'to'        => $param2,
        'format'    => 'php',
        'reason'    => $param3,
        'token'     => $token)
);
$api = new ApiMain( $params, true);
$api->execute();
$data = & $api->getResultData();


$output = "moved $param1 to $param2 - $token";

也使用curl尝试了以下代码,这也导致了令牌错误

global $wgUser;
$token = $wgUser->editToken();
$url = 'http://www.website.com/api.php?';
    $myvars = 'action=move&format=xml&from=' . "$param1" . '&to=' . "$param2" . '&reason=' . "$param3" . '&token=' . urlencode($token);

    $ch = curl_init( $url );
    curl_setopt( $ch, CURLOPT_POST, 1);
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars);
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt( $ch, CURLOPT_HEADER, 0);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

    $response = curl_exec( $ch );


$output = "moved $param1 to $param2 - $myvars - $response";

我在代码中遗漏了什么,或者我可能在某处设置错误了吗?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

实际错误可能是其他错误。您是否尝试按照https://www.mediawiki.org/wiki/API:Calling_internally

中的说明进行操作

答案 1 :(得分:0)

我被建议不使用任何一种方法在扩展中移动页面,并且被指示使用以下代码,这非常有用。希望这有助于某人。

$oldTitle = Title::newFromText( $param1 );
$newTitle = Title::newFromText( $param2 );
// Error checking here
$oldTitle->moveTo( $newTitle, true, $param3, true );