Javaを介してラベルを編集するためにウィキデータにリクエストを行っていました。以下では、Jsoup を使用してリクエストを行いました。
Response res = (Response) Jsoup.connect("https://www.wikidata.org/w/index.php?title=Special:UserLogin&returnto=Wikidata%3AMain+Page")
.method(Method.POST)
.timeout(10000)
.execute();
この応答を介して取得された Cookie は、API を介して wiki にログインする際に使用されます (エンティティのラベルを変更するために必要な csrf トークンを取得するため)。
まず、ログイン トークンが生成されました。
String url = "https://www.wikidata.org/w/api.php?action=query&format=xml&meta=tokens&type=login";
org.jsoup.nodes.Document loginData = Jsoup.connect(url)
.data("action","query")
.data("format","xml","meta","tokens","type","login")
.cookies(res.cookies())
.get();
そしたらログインできた
org.jsoup.nodes.Document loginData1 = Jsoup.connect(url)
.data("action","login")
.data("format","xml","lgname",username,"lgpassword",password,"lgtoken",loginToken)
.cookies(res.cookies())
.post();
ログインは成功しました。
csrfトークンを取得するために
loginData = Jsoup.connect(url)
.data("action","query")
.data("format","xml","meta","tokens","type","csrf")
.cookies(res.cookies())
.get();
ここで csrf トークンは次のように生成されます: +\
しかし、なぜそのような無効なトークンが生成されるのかログインしているので、Java プログラムでラベルを設定できませんでした。正しい方法は何ですか?