API:Edit/zh

使用POST 请求编辑某个页面.



-{zh-hans:示例; zh-hant:範例;}-
此示例中的示例代码使用Python. 有关示例请见，响应请参阅.



POST请求
编辑，以及任何POST请求实际上都是一个多步骤的过程.


 * 1. 使用中描述的方法之一登录. 请注意，虽然此操作需要将其正确地归为编辑者的贡献，但许多Wiki确实允许用户无需注册或登录帐户即可进行编辑.


 * 2. 获取：


 * 3. 发送带有CSRF令牌的POST请求以在页面上执行操作：

下方的“回应”段落显示了最终的POST请求，以在页面上执行操作. 请参阅和的页面，以获取对先前步骤的中间JSON响应.

另请注意，此页面上查询中的令牌（tokens）是示例值. 实际的令牌对于每个登录会话和跨站请求都是唯一的. 示例中包括它们只是为了演示如何正确格式化查询.

回应


示例代码


使用示例


编辑冲突
“Python示例”是一个对于注册用户编辑请求的简单实现. 在实际情况下，应注意防止编辑冲突. 当两个或多个用户试图同时编辑同一页面时，可能会发生这种情况.

当我们请求CSRF令牌时，可以通过检索最后的时间戳来避免冲突. 在第3步的CSRF令牌请求中加入 可以获取最新版本的时间戳. 当我们发出编辑请求时，此时间戳将用作.

此外还需要开始编辑的准确时间. 同样可以通过在CSRF请求中添加 来检索此内容. 该值将作为.

最后，在实际的编辑请求中，将 和 参数设定为类似如下内容：



大编辑
包含了大量的文本内容（超过8000个字符）的POST请求应该在请求头中加入. 由于 无需对空格和标点进行HTML字符转义（例如，百分比编码），传输的数据量将会比使用百分比编码的相同内容数据更小.

但是， 仍然会增加一些开销——每个参数大约160个字节. 对于不需要添加许多转义符的短消息，此开销量可能是低效的，因此百分比编码是这一情况的首选.

请注意对于上文的Python示例代码，该请求默认使用百分比编码.

请参见MDN Web 文档来获取有关内容类型（content-type）和POST请求的更多技术讨论. 请参见the Python Requests文档来获取如何使用与Python示例代码类似的方法来传递.

验证码
如果您的目标wiki使用，您的请求可能会返回一个错误值，该值包含了一个id编号和简单的测验，例如一个问题、一道数学题或是一张图片的URL. 为了完成您的编辑，您必须完成这一测验，然后将id和正确的答案附在原始的请求字符串后并再次发送请求，例如：

其他验证码系统和插件可能会使用类似的不同参数. 通常情况下，将id和测试题的字段名称用作第二个请求中的参数.



可能的错误


参数历史

 * v1.35: 启用
 * v1.25: 启用
 * v1.21: 启用 ,
 * v1.20: 启用
 * v1.19: 启用
 * v1.18: 弃用 ,
 * v1.17: 启用
 * v1.16: 弃用 ,
 * v1.16: 启用
 * v1.15: 启用 ,
 * v1.14: 启用



更多注释

 * API并不严格需要登录，但登录操作可以正确地标记作者的贡献. 未登录用户的成功编辑将以IP地址作为贡献者.
 * 未登录的机器人可能会面临编辑和其他写入请求的限制；有关更多详细信息，请参见.
 * 未登录的用户将始终获得空的CSRF令牌.
 * 请求令牌的过程在各个版本中已多次更改. 参见以获取更多信息.
 * 提供了一种在Wiki页面中运行代码时获取编辑令牌的方法.
 * 在单个登录会话期间，您可以对同一Wiki中的所有编辑操作使用相同的CSRF令牌.
 * 优良作法是在查询字符串的末尾，或至少在text参数之后传递请求中的所有令牌. 这样，如果连接中断，令牌将不会被传递，因此编辑将失败.  如果您使用了来发送请求，那么这一操作会自动进行.
 * 尽管从1.18版本开始， 和 已经在技术上从API:Edit中移除，但扩展了API:Edit以便与验证码一起使用. 因此，如果安装了ConfirmEdit插件，这些参数仍然可用.  在1.18及以后版本的MediaWiki中附带了ConfirmEdit.



參見

 * - 包含对编辑页面有用的链接
 * - 描述了通过脚本或应用程序而不是GUI访问Wiki时如何使用简化界面登录.
 * - 更多有关使用机器人自动编辑页面的详细信息.
 * - 提供在MediaWiki页面中运行JavaScript时访问编辑令牌的方法.
 * - 包含了有关使用令牌登录或发出POST请求的更多详细信息.
 * - 已弃用的API，与不同，用于在早期版本的MediaWiki中请求令牌.
 * - 允许您查看页面的两个修订版本之间的差异.
 * - 修改一个页面的标签
 * - 回退一系列编辑.
 * - 将文件回退到其较早的状态.
 * - 删除并恢复页面的修订版本.