我正在尝试对MediaWiki api使用clientlogin操作,如下所示。
[当我尝试发出请求时,如api所说的
/ wiki / api.php?action = clientlogin&format = json&logintoken = {token}&username = {username}&password = {password}
我收到logintoken需要在请求正文中的错误。这使我转到下面的结果代码,但现在返回错误,指出需要设置logintoken。任何线索,这是为什么?
旁注:我已经在通过输入映射传递的另一个函数中检索了用户名和密码。
async function requestLogin(loginToken: string, inputs: {[key:string]: string}) {
let loginRequest: string = "?action=clientlogin&format=json";
let loginData: {[key:string]: string} = {
'logintoken': loginToken
};
for (let key in inputs) {
// place the key/value into the request
loginData[key] = inputs[key];
}
console.log(loginData);
const login = bent(state.url, 'POST', 'json');
let loginResponse = await login(loginRequest, loginData);
if ("error" in loginResponse) {
console.log(loginResponse["error"]);
console.log(loginResponse["error"]["info"]);
} else {
// Successfully logged in :)
console.log(loginResponse);
}
}
似乎您正在将主体作为JSON发送。传统的MediaWiki API可以采用application/x-www-form-urlencoded
或multipart/form-data
格式的数据。 (即最简单的方法是将查询字符串从URL移到正文。)有一个REST API,它接受JSON输入,但是它是新的,没有充分的文档说明,并且在此时仅提供有限的功能集。
另外,您确定需要action=clientlogin
吗?它是一个API,旨在在客户端上构建交互式登录界面。它不像人们通常认为的那样起作用。 action=login
可能是更好的选择。