我正在使用mediawiki API,並且我想使用API創建用戶登錄。我提到這個link。但我無法創建會話。如何在mediawiki API中使用php curl創建會話
這裏是我的代碼
第一步
與此
session_start();
$data = "action=login&lgname=Wiki&lgpassword=gjnlt&lgtoken=5ae555656110dd20a2b0504e4d7e35e0"; // login
$result=call($data); // get the session id
function call($data=null)
{
$ch = curl_init('http://192.168.1.32/Eb_new/mediawiki/api.php?format=json');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept: application/json',
'Content-Length: ' . strlen($data))
);
$result = curl_exec($ch);
return $result=json_decode($result);
}
我得到的迴應是我創建了一個會話ID。
{"login":{"result":"Success","lguserid":5,"lgusername":"Wiki","lgtoken":"d85fd0201276632858ce4ad3ac351de4","cookieprefix":"EB_new_wiki_","sessionid":"3b8cdab43d4cda6b4548a3cc27604e20"}}
第二步
現在我有$result->login->sessionid
會話ID。要設置我又呼叫設置會話這樣
setsession($result->login->sessionid); // set the session
function setsession($sessionid)
{
$field_array= array(
'Accept' => 'HTTP_ACCEPT',
'Accept-Charset' => 'HTTP_ACCEPT_CHARSET',
'Accept-Encoding' => 'HTTP_ACCEPT_ENCODING',
'Accept-Language' => 'HTTP_ACCEPT_LANGUAGE',
'Connection' => 'HTTP_CONNECTION',
'Host' => 'HTTP_HOST',
'Referer' => 'HTTP_REFERER',
'User-Agent' => 'HTTP_USER_AGENT',
'Set-Cookie'=>'enwikiSession='.$sessionid.' ;domain=http://192.168.1.32/Eb_new/mediawiki'
);
$curl_request_headers=array();
foreach ($field_array as $key => $value) {
if(isset($_SERVER["$value"])) {
$server_value=$_SERVER["$value"];
$curl_request_headers[]="$key: $server_value";
}
};
$curl_request_headers[]="Expect: ";
session_write_close();
$data = "action=login&lgname=Wiki&lgpassword=gjnlt&lgtoken=5ae555656110dd20a2b0504e4d7e35e0"; // login
$ch = curl_init('http://192.168.1.32/Eb_new/mediawiki/api.php?format=json');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $curl_request_headers);
//curl_setopt($curl_handle, CURLOPT_COOKIE, 'enwikiSession='.$sessionid.' ;domain=http://192.168.1.32/Eb_new/mediawiki');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
echo $result = curl_exec($ch);
}
會話,但用戶沒有登錄中。我錯在哪裏。任何幫助將不勝感激 。謝謝
您省略了第二個響應。它可能包含一個'NeedCaptcha'錯誤。另外,您正在設置一個'enwikiSession' cookie,但是您的目標wiki實際上是否被稱爲enwiki?通常,[OAuth](https://www.mediawiki.org/wiki/OAuth/For_Developers)(例如[Extension:OAuthAuthentication](https://www.mediawiki.org/wiki/Extension:OAuthAuthentication))通常比使用登錄API更好的方法。 – Tgr