2017-10-14 11 views
0

のためのMediaWiki APIでカールを使用する方法、私はAPI呼び出しのためにカールを使用したい、私はは、私は、ユーザーを登録するmediawikiの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 = "[email protected]"; 
    $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; 
} 
私は応答 を得た

{ てみました"error":{ "code": "badtoken"、 "info": "無効なCSRFトークン"、 "*": "APIの使用方法についてはhttp://localhost/WC/gccfwiki/api.phpを参照してください:のmediawiki-api-announceメーリングリストを購読してくださいhttps://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> APIの廃止と改訂のお知らせ。 } }

私はそれをどのように解決しますか?

+0

あなたはCurlを直接使うという考えに執着していますか?代わりに 'addwiki/mediawiki-api'ライブラリを使うことができます。これはずっと簡単です! :-) –

+0

私は別のプロジェクトからwikiにcurlを呼び出す必要があります。 – Midlaj

+0

はい、そのプロジェクトではあなたができます。 '$ userCreator() - > create( 'User name'、 'pwd123');となり、すべての複雑さはhttps://github.com/addwiki/mediawiki-apiによって処理されます。 –

答えて

0

あなたはhttps://www.mediawiki.org/w/api.php?action=query&meta=tokens&type=createaccountのようなコールで最初のウィキからのトークンを取得する必要があり、またhttps://www.mediawiki.org/wiki/API:Account_creation

を参照してくださいそれはあなたがが作業しているMediaWikiのバージョンに少し依存しています。

+0

最初の呼び出し、上記のコードでは、私はgettoken()を説明し、私はそれを次のカールに渡したが、それは無効なcsrfトークンを示している – Midlaj

+0

GetTokenが関数なら、$ this-> getToken()別名括弧付きですか?] –

0

ベストアンサーは、既存のclient librariesの1つではなく手作りのカールクエリーを使用して自分自身を痛めつけようとしていますが、実際には主張するならば、 cookiejar curlオプションを使用してセッションを保存します。

関連する問題