Policy:User-Agent policy/zh

From Wikimedia Foundation Governance Wiki
Revision as of 08:19, 24 June 2019 by FuzzyBot (talk | contribs) (Updating to match new version of source page)

自2015年二月15日起,Wikimedia对所有请求要求一个HTTP User-Agent 请求头。技术组成员做出此项执行要求,并且在技术邮件组中发布并讨论了这个决定[1][2]。对此的解释是没有在请求中包含User-Agent字符串的客户端基本都是运行有错误的代码,并且给服务器造成很多负担,而没有对这个维基项目做出贡献。注意一些语言中包含的没有说明作用的User-Agent默认值亦将会被Wikimedia网站屏蔽(或者其一部分,例如api.php页面),例如Perl语言的libwww库。

不提供User-Agent请求头的客户代理(浏览器或脚本)现在可能会遇到如下所示之错误讯息:

"脚本应该使用可提供信息的User-Agent字符串,并在其中包括联络讯息,否则这些脚本可能在无通知的情况被IP封禁。"

提供被拉黑的User-Agent(例如任何以“lwp”开头的User-Agent字符串)的客户代理可能会遇到如下不太有用的错误讯息:

"我们的服务器目前遇到了技术问题,可能是临时的并且很快会被修复。请几分钟后再试。"

这项改动最可能影响通过api.php或其他方式自动访问Wikimedia的脚本(机器人)和命令行程式。[3]如果你执行一个机器人,请在请求头中包含能够标识此机器人的User-Agent,并且不与很多其他机器人冲突。并且在其中包含你的联络方式(例如本地维基上的用户页,使用跨维基链接语法的相关维基项目的用户页,一个相关外部站点的URI,或是电邮地址),举例如下:

User-Agent: CoolToolName/0.0 (https://example.org/CoolTool/; CoolTool@example.org) UsedBaseLibrary/0.0

The generic format is <client name>/<version> (<contact information>) <library/framework name>/<version> [<library name>/<version> ...]. Parts that are not applicable can be omitted.

如果你执行一个自动代理,请考虑按照互联网惯例在User-Agent中包括“bot”(不限大小写)。这会被Wikimedia的系统识别,被用于将流量分类,并且提供更精确的统计数据。

不要拷贝浏览器上的的客户代理字符串,行为像机器人但是具有浏览器的客户代理的行为将被视为有害。[4]亦不要使用通用代理,例如“curl”、“lwp”和“Python-urllib”等等。像pywikibot这样的大型框架有很多用户在用,仅仅使用“pywikibot”很可能比较模糊。在其中包含具体任务、脚本等细节通常是个好主意,即使这些信息对操作者外的其他人是模糊的。[5]

更多信息请移步MediaWiki API 文档[6]

网络浏览器一般会自动包括User-Agent字符串,如果你遭遇上述错误,请参阅所使用浏览器的用户手册修改User-Agent字符串。请注意某些插件或隐私保护代理可能消除这个头部。建议使用一个一般的User-Agent字符串,而不是消除之或留空。请注意其他特性更有可能被网站用于确定你的身份:如阁下对保护隐私感兴趣,请浏览Panopticlick project

以Flash或JavaScript编写的基于浏览器的应用通常是强制与宿主浏览器的User-Agent头部相同,这不被视为违规,然而这些程序应该包含Api-User-Agent头部来实现合适的用户代理信息。

自2015年始,大体从技术上对用户代理(user agent)不作强制要求,但是在某些特定情况下依然需要。

[7]

备注

  1. The Wikitech-l February 2010 Archive by subject
  2. User-Agent: | Wikipedia | Wikitech
  3. API:FAQ - MediaWiki
  4. [Wikitech-l] User-Agent:
  5. Anomie (31 July 2014). "Clarification on what is needed for "identifying the bot" in bot user-agent?". Mediawiki-api. 
  6. As an example (among other examples) of how to set a user-agent, in PHP, one might use the following, if one's cURL handle is $ch:
    curl_setopt($ch, CURLOPT_USERAGENT ,'CoolToolName/0.0 (https://example.org/CoolTool/; CoolTool@example.org) UsedBaseLibrary/0.0');
    
  7. gmane.science.linguistics.wikipedia.technical/83870 (deadlink)