【问题标题】:Unable to obtain edit token for MediaWiki api无法获取 MediaWiki api 的编辑令牌
【发布时间】:2012-01-10 09:18:06
【问题描述】:

我无法获得 MediaWiki 的编辑令牌:

请求

POST /w/api.php HTTP/1.1
Host: en.wikipedia.org
Accept: */*
User-agent: Sbose7890
Content-Length: 59
Content-Type: application/x-www-form-urlencoded

action=query&prop=info&intoken=edit&titles=Java&format=json 

回应

HTTP/1.0 200 OK
Date: Tue, 10 Jan 2012 09:14:03 GMT
Server: Apache
X-Content-Type-Options: nosniff
Cache-Control: private
Vary: Accept-Encoding
Content-Length: 209
Content-Type: application/json; charset=utf-8
X-Cache: MISS from sq34.wikimedia.org
X-Cache-Lookup: MISS from sq34.wikimedia.org:3128
X-Cache: MISS from sq59.wikimedia.org
X-Cache-Lookup: MISS from sq59.wikimedia.org:80
Connection: close

{
  "query": {
    "pages": {
      "69336": {
        "starttimestamp": "2012-01-10T09:14:03Z",
        "lastrevid": 469959190,
        "touched": "2012-01-07T11:38:04Z",
        "pageid": 69336,
        "title": "Java",
        "edittoken": "+\\",
        "ns": 0,
        "length": 37800,
        "counter": ""
      }
    }
  }
}

我使用hurl.it 进行了尝试。

我也登录了。

【问题讨论】:

    标签: http mediawiki


    【解决方案1】:

    您将获得一个编辑令牌:+\。这是匿名用户的,并且始终相同。请参阅mw:Manual:Edit token,以及从那里链接的修订。

    问题在于无论您的登录如何,都必须登录 hurl。它必须发送一个有效的 enwiki_session cookie,例如您的。但是不要发布你的,每个人都可以登录!

    【讨论】:

    • en.wikipedia.org/w/… 生成了一个编辑令牌。我的应用程序如何获取令牌?它必须专门发送cookie吗? (我可以使用控制台应用程序来做到这一点吗)?
    • 是的,当您访问该 uri 时,您的浏览器会将您的登录 cookie 发送到维基百科。 HURL 没有,它从哪里知道?您的应用程序还必须发送 cookie,您在登录过程中没有收到吗?如果它是浏览器 (javascript) 应用程序,浏览器将自动发送任何 cookie。
    • 所以,我需要包含客户端代码(例如,在 Javascvript 中)来发送 cookie。对吗?
    • en.wikipedia.org/w/… 在这种情况下,我收到了编辑令牌。那么服务器是如何接收我的 cookie 的(因为我没有明确发送它?
    • 正如我所说...浏览器会自动执行此操作。一些 cookie 可以显式设置 (document.cookie),但会话 cookie 甚至是 http-only。它是在您登录时由服务器设置的。
    【解决方案2】:

    简而言之,不要使用原始的 MediaWiki APIevery conceivable language out there 的客户端会为您处理所有这些繁琐的事情。例如,如果您使用 Ruby,以下是您登录和编辑文章所需的所有 MediaWiki::Gateway 代码:

    mw = MediaWiki::Gateway.new(your-wiki)
    mw.login(user, pw)
    mw.create("Article", "Hello world")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-05
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 2018-10-10
      • 1970-01-01
      • 2018-01-08
      相关资源
      最近更新 更多