User-Agent-Richtlinie

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

Seit dem 15. Februar 2010 erfordern Wikimedia-Seiten einen HTTP-User-Agent-Header für alle Abfragen. Dies war eine operative Entscheidung der technischen Mitarbeiter und wurde auf der technischen Mailingliste angekündigt und diskutiert.[1][2] Der Grund dafür ist, dass Clients, die keine User-Agent-Zeichenkette senden, meist schlecht funktionierende Skripte sind, die eine große Belastung für die Server verursachen, ohne den Projekten zu nützen. User-Agent-Zeichenketten, die mit nicht beschreibenden Standardwerten wie python-requests/x beginnen, können auch für Wikimedia-Seiten (oder Teile einer Website, z. B. api.php) gesperrt werden.

Bei Abfragen (z. B. von Browsern oder Skripten), die keinen beschreibenden User-Agent-Header senden, kann eine Fehlermeldung wie diese auftreten:

Skripte sollten eine informative User-Agent-Zeichenkette mit Kontaktinformationen nutzen, andernfalls können sie ohne Vorwarnung gesperrt werden.

Bei Abfragen von nicht zugelassenen User Agents wird möglicherweise stattdessen eine weniger hilfreiche Fehlermeldung wie diese angezeigt:

Auf unseren Servern liegt derzeit ein technisches Problem vor. Bitte versuche es in ein paar Minuten erneut.

Diese Änderung betrifft höchstwahrscheinlich Skripte (Bots), die automatisch (über api.php oder auf andere Weise) auf Wikimedia-Webseiten wie Wikipedia zugreifen, sowie Kommandozeilenprogramme.[3] Wenn du einen Bot betreibst, sende bitte einen User-Agent-Header, der den Bot mit einer Kennung identifiziert, die nicht mit vielen anderen Bots verwechselt werden kann, und der eine Möglichkeit zur Kontaktaufnahme mit dir bereitstellt (z. B. eine Benutzerseite im lokalen Wiki, eine Benutzerseite in einem verwandten Wiki mit Interwiki-Verlinkungssyntax, eine URI für eine relevante externe Website oder eine E-Mail-Adresse), z. B.:

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

Das generische Format ist <client name>/<version> (<contact information>) <library/framework name>/<version> [<library name>/<version> ...]. Nicht anwendbare Teile können weggelassen werden.

Wenn du einen automatisierten Agenten verwendest, beachte bitte die internetweite Konvention, die Zeichenkette "Bot" in beliebiger Kombination aus Klein- und Großbuchstaben in die Zeichenkette des User Agents aufzunehmen. Dies wird von den Systemen von Wikimedia erkannt und zur Klassifizierung des Datenverkehrs und zur Bereitstellung genauerer Statistiken verwendet.

Kopiere nicht den User Agent eines Browsers für deinen Bot, da ein botähnliches Verhalten mit dem User Agent eines Browsers als böswillig angesehen wird.[4] Verwende keine generischen Agenten wie "curl", "lwp", "Python-urllib" usw. Bei großen Frameworks wie pywikibot gibt es so viele Benutzer, dass "pywikibot" wahrscheinlich etwas vage ist. Es wäre eine gute Idee, Details zu der spezifischen Aufgabe / dem Skript / etc. anzugeben, auch wenn diese Details für jeden außer dem Bediener undurchsichtig sind.[5]

Webbrowser senden im Allgemeinen automatisch eine User-Agent-Zeichenkette. Wenn der obige Fehler auftritt, lies bitte im Handbuch deines Browsers nach, wie du die User-Agent-Zeichenkette festlegst. Beachte, dass einige Plugins oder Proxys zur Verbesserung der Privatsphäre diesen Header unterdrücken können. Für anonymes Surfen wird jedoch empfohlen, eine generische User-Agent-Zeichenkette zu senden, anstatt sie zu unterdrücken oder eine leere Zeichenkette zu senden. Beachte, dass andere Funktionen dich einer Website gegenüber viel wahrscheinlicher identifizieren. Wenn du am Schutz deiner Privatsphäre interessiert bist, besuche das Projekt Verwische Deine Spuren.

Browserbasierte Anwendungen, die in JavaScript geschrieben sind, müssen normalerweise denselben User-Agent-Header senden wie der Browser, der sie bereitstellt. Dies stellt keinen Verstoß gegen die Richtlinien dar, jedoch wird solchen Anwendungen empfohlen, den Api-User-Agent-Header einzuschließen, um einen geeigneten Agent bereitzustellen.

Seit 2015 lehnen Wikimedia-Seiten nicht mehr alle Seitenaufrufe und API-Abfragen von Clients ab, die keinen User-Agent-Header festlegen. Daher wird die Anforderung nicht automatisch durchgesetzt. Vielmehr kann sie in bestimmten Fällen nach Bedarf durchgesetzt werden.[6]

Codebeispiele

Wenn du in Wikimedia-Wikis keinen User-Agent-Header oder einen leeren bzw. generischen Header angibst, schlägt deine Abfrage mit einem HTTP-403-Fehler fehl. Andere MediaWiki-Installationen haben möglicherweise ähnliche Richtlinien.

JavaScript

Wenn du die API über browserbasiertes JavaScript aufrufst, kannst du den User-Agent-Header nicht beeinflussen: Der Browser verwendet seinen eigenen. Um dies zu umgehen, verwende den Api-User-Agent-Header:

// 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

In PHP kannst du deinen User-Agent mit Code wie diesem identifizieren:

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

cURL

Oder wenn du cURL verwendest:

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

Python

In Python kannst du die Requests-Bibliothek verwenden, um einen Header zu setzen:

import requests

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

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

Oder wenn du SPARQLWrapper wie in https://people.wikimedia.org/~bearloga/notes/wdqs-python.html verwenden möchtest:

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()

Bemerkungen

  1. Wikitech-l Februar 2010, Archiv nach Thema
  2. User-Agent: - Wikitech-l - lists.wikimedia.org
  3. API:FAQ - MediaWiki
  4. [Wikitech-l] User-Agent:
  5. Klarstellung, was zum "Identifizieren des Bots" im Bot-User-Agent erforderlich ist?
  6. gmane.science.linguistics.wikipedia.technical/83870 (Toter Link)

Siehe auch