This page is a translated version of the page Policy:User-Agent policy and the translation is 100% complete.

Od 15. února 2010 vyžadují stránky Wikimedia HTTP User-Agent záhlaví pro všechny požadavky. Toto bylo operativní rozhodnutí technického personálu a bylo oznámeno a prodiskutováno na technickém mailing listu.[1][2] Důvodem je, že klienti, kteří neposílají řetězec User-Agent, jsou většinou špatně chované skripty, které způsobují velké zatížení serverů, aniž by to prospělo projektům. Řetězce User-Agent, které začínají nepopsatelnými výchozími hodnotami, jako je python-requests/x, mohou být také blokovány z webů Wikimedia (nebo částí webu, např. api.php).

U požadavků (např. z prohlížečů nebo skriptů), které neodesílají popisnou hlavičku User-Agent, se může objevit chybová zpráva, jako je tato:

Skripty by měly používat informativní řetězec User-Agent s kontaktními informacemi, jinak mohou být bez upozornění zablokovány.

Požadavky od nepovolených uživatelských agentů mohou místo toho narazit na méně užitečnou chybovou zprávu, jako je tato:

Naše servery mají aktuálně technický problém. Zkuste to prosím znovu za několik minut.

Tato změna s největší pravděpodobností ovlivní skripty (boty) přistupující na stránky Wikimedie, jako je Wikipedie automaticky, prostřednictvím api.php nebo jinak, a programy příkazového řádku.[3] Pokud spouštíte robota, zašlete prosím hlavičku User-Agent, která robota identifikuje pomocí identifikátoru, který nebude zaměňován s mnoha jinými roboty, a poskytne nějaký způsob, jak vás kontaktovat (např. uživatelská stránka na místní wiki, uživatelská stránka na související wiki používající syntaxi propojení interwiki, URI pro relevantní externí webovou stránku nebo e-mailovou adresu), např.:

User-Agent: CoolBot/0.0 (https://example.org/coolbot/; coolbot@example.org) generic-library/0.0

Obecný formát je <client name>/<version> (<contact information>) <library/framework name>/<version> [<library name>/<version> ...]. Části, které nejsou použitelné, lze vynechat.

Pokud provozujete automatického agenta, zvažte prosím dodržování celointernetové konvence zahrnutí řetězce "bot" do řetězce User-Agent v jakékoli kombinaci malých nebo velkých písmen. To je rozpoznáno systémy Wikimedie a používá se ke klasifikaci provozu a poskytování přesnějších statistik.

Nekopírujte pro svého robota uživatelského agenta prohlížeče, protože chování robota s uživatelským agentem prohlížeče bude považováno za škodlivé.[4] Nepoužívejte generické agenty jako "curl", "lwp", "Python-urllib" a podobně. U velkých rámců, jako jsou pywikibot, je tolik uživatelů, že jen "pywikibot" bude pravděpodobně poněkud vágní. Zahrnutí podrobností o konkrétním úkolu/skriptu/atd. by bylo dobrý nápad, i když jsou tyto podrobnosti neprůhledné pro kohokoli kromě operátora.[5]

Webové prohlížeče obecně odesílají řetězec User-Agent automaticky. Pokud se setkáte s výše uvedenou chybou, podívejte se, prosím, do manuálu vašeho prohlížeče a zjistěte, jak nastavit řetězec User-Agent. Všimněte si, že některé pluginy nebo proxy pro vylepšení soukromí mohou tuto hlavičku potlačit. Pro anonymní surfování se však doporučuje odeslat obecný řetězec User-Agent namísto jeho potlačení nebo odeslání prázdného řetězce. Všimněte si, že jiné funkce vás s větší pravděpodobností identifikují na webových stránkách – pokud máte zájem o ochranu svého soukromí, navštivte projekt Cover Your Tracks.

Aplikace založené na prohlížeči napsané v JavaScriptu jsou obvykle nuceny odesílat stejnou hlavičku User-Agent jako prohlížeč, který je hostí. Nejedná se o porušení zásad, nicméně se doporučuje, aby takové aplikace obsahovaly hlavičku Api-User-Agent, aby dodaly vhodného agenta.

Od roku 2015 stránky Wikimedie neodmítají všechna zobrazení stránek a požadavky API od klientů, kteří nemají nastavenou hlavičku User-Agent. Požadavek jako takový není automaticky vynucován. Spíše může být vymáhána v konkrétních případech podle potřeby.[6]

Příklady kódu

Pokud na wikinách Wikimedie nezadáte hlavičku User-Agent nebo zadáte prázdnou či obecnou hlavičku, váš požadavek selže s chybou HTTP 403. Ostatní instalace MediaWiki mohou mít podobné zásady.

JavaScript

Pokud voláte API z JavaScriptu založeného na prohlížeči, nebudete moci ovlivnit hlavičku User-Agent: Prohlížeč použije svou vlastní. Chcete-li to obejít, použijte hlavičku Api-User-Agent:

// Using XMLHttpRequest
xhr.setRequestHeader( 'Api-User-Agent', 'Example/1.0' );
// Using jQuery
$.ajax( {
    url: 'https://example/...',
    data: ...,
    dataType: 'json',
    type: 'GET',
    headers: { 'Api-User-Agent': 'Example/1.0' },
} ).then( function ( data )  {
    // ..
} );
// Using mw.Api
var api = new mw.Api( {
    ajax: {
        headers: { 'Api-User-Agent': 'Example/1.0' }
    }
} );
api.get( ... ).then( function ( data ) {
    // ...
});
// Using Fetch
fetch( 'https://example/...', {
    method: 'GET',
    headers: new Headers( {
        'Api-User-Agent': 'Example/1.0'
    } )
} ).then( function ( response ) {
    return response.json();
} ).then( function ( data ) {
    // ...
});

PHP

V PHP můžete identifikovat svého user-agenta pomocí kódu, jako je tento:

ini_set( 'user_agent', 'CoolBot/0.0 (https://example.org/coolbot/; coolbot@example.org)' );

cURL

Nebo pokud používáte cURL:

curl_setopt( $curl, CURLOPT_USERAGENT, 'CoolBot/0.0 (https://example.org/coolbot/; coolbot@example.org)' );

Python

V Pythonu můžete použít knihovnu Requests k nastavení záhlaví:

import requests

url = 'https://example/...'
headers = {'User-Agent': 'CoolBot/0.0 (https://example.org/coolbot/; coolbot@example.org)'}

response = requests.get(url, headers=headers)

Nebo, pokud chcete použít SPARQLWrapper jako v https://people.wikimedia.org/~bearloga/notes/wdqs-python.html:

from SPARQLWrapper import SPARQLWrapper, JSON

url = 'https://example/...'
user_agent = 'CoolBot/0.0 (https://example.org/coolbot/; coolbot@example.org)'

sparql = SPARQLWrapper(url, agent = user_agent )
results = sparql.query()

Poznámky

  1. Archiv Wikitech-l z února 2010 podle tématu
  2. User-Agent: - Wikitech-l - lists.wikimedia.org
  3. API:FAQ - MediaWiki
  4. [Wikitech-l] User-Agent:
  5. Vysvětlení toho, co je potřeba pro "identifikaci robota" v robotu user-agent?
  6. gmane.science.linguistics.wikipedia.technical/83870 (mrtvý odkaz)

Související