Jump to content

Politique:Règles d’utilisation de l’agent utilisateur de la Fondation Wikimedia

From Wikimedia Foundation Governance Wiki
This page is a translated version of the page Policy:Wikimedia Foundation User-Agent Policy and the translation is 100% complete.

Depuis le 15 février 2010, les sites Wikimedia nécessitent un entête HTTP d’agent utilisateur (User-Agent) pour toutes les requêtes. C’est une décision opérationnelle du personnel technique qui fut annoncée et discutée sur la liste de diffusion technique.[1][2] L’explication est que les clients qui n’envoient pas de chaîne de l’agent utilisateur sont des scripts qui se comportent très mal la plupart du temps en causant une surcharge des serveurs sans bénéficier du projet. Les chaînes de caractères de l’agent utilisateur qui commencent avec des valeurs par défaut non descriptives, comme par exemple python-requests/x, peuvent aussi être bloquées par les sites Wikimedia (ou partiellement sur ces sites, comme api.php).

Les requêtes (venant par exemple d'un navigateur ou d'un script) qui n'envoient pas d'entête remplie de l'agent utilisateur, pourront recevoir un message d'erreur similaire à :

Les scripts doivent utiliser une chaîne de caractères informative pour l'agent utilisateur avec les informations de contact, sinon ils peuvent être bloqués sans préavis.

Les requêtes émises par contre par des agents utilisateurs prohibés rencontreront plutôt un message d'erreur moins utile comme celui-ci :

Nos serveurs connaissent actuellement un problème technique. Veuillez réessayer dans quelques minutes.

Ce changement est susceptible d’affecter les scripts (bots) qui accèdent automatiquement aux sites web Wikimedia tels que Wikipédia, via api.php ou autre, ainsi que les programmes en ligne de commande.[3] Si vous utilisez un bot, veuillez envoyer un entête d’agent utilisateur identifiant le bot avec un identifiant qui ne peut pas être confondu avec celui d’autres bots, et fournir un moyen de vous contacter (par exemple, une page utilisateur sur le wiki local, une page utilisateur sur un wiki associé utilisant la syntaxe de liaison interwiki, une URI pour un site web externe pertinent ou une adresse e-mail), par exemple :

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

Le format générique est <client name>/<version> (<contact information>) <library/framework name>/<version> [<library name>/<version> ...]. Les parties non applicables peuvent être omises.

Si vous utilisez un agent automatisé, veuillez suivre la convention Internet consistant à inclure la chaine « bot » dans la chaine de l’agent utilisateur, dans n’importe quelle combinaison de lettres minuscules ou majuscules. Cette chaine est reconnue par les systèmes Wikimedia et utilisée pour classer le trafic et fournir des statistiques plus précises.

Ne copiez pas l’agent utilisateur d’un navigateur pour votre bot, car un comportement de type bot avec l’agent utilisateur d’un navigateur sera considéré comme malveillant.[4] N'utilisez pas d’agents génériques tels que « curl », « lwp », « Python-urllib », etc. Pour les grands frameworks comme pywikibot, il y a tellement d’utilisateurs que le simple « pywikibot » risque d’être quelque peu vague. Il serait judicieux d’inclure des détails sur la tâche/le script/etc. spécifique, même si ces détails ne sont compréhensibles que pour l’opérateur ou l’opératrice.[5]

Les navigateurs Web envoient généralement une chaine d’agent utilisateur automatiquement ; si vous rencontrez l’erreur ci-dessus, veuillez consulter le manuel de votre navigateur pour savoir comment définir la chaine d’agent utilisateur. Notez que certains greffons ou proxys destinés à améliorer la confidentialité peuvent supprimer cet entête. Cependant, pour une navigation anonyme, il est recommandé d’envoyer une chaine d’agent utilisateur générique, plutôt que de la supprimer ou d’envoyer une chaine vide. Notez que d’autres fonctionnalités sont beaucoup plus susceptibles de vous identifier sur un site web. Si vous souhaitez protéger votre confidentialité, consultez le projet Cover Your Tracks.

Les applications basées sur un navigateur et écrites en JavaScript sont généralement obligées d’envoyer le même entête d’agent utilisateur que le navigateur qui les héberge. Cela ne constitue pas une violation de la politique, mais il est recommandé à ces applications d’inclure l'en-tête Api-User-Agent afin de fournir un agent approprié.

Depuis 2015, les sites Wikimedia ne rejettent pas toutes les consultations de pages et les requêtes API provenant de clients qui ne définissent pas d’entête d’agent utilisateur. Ainsi, cette exigence n’est pas automatiquement appliquée. Elle peut toutefois être appliquée dans certains cas spécifiques, si nécessaire.[6]

Exemples de code

Sur les wikis Wikimedia, si vous ne fournissez pas d’entête User-Agent, ou si vous fournissez un entête vide ou générique, votre requête échouera avec une erreur HTTP 403. D’autres installations MediaWiki peuvent avoir des politiques similaires.

JavaScript

Si vous appelez l’API à partir d’un JavaScript basé sur un navigateur, vous ne pourrez pas modifier l’entête User-Agent : le navigateur utilisera le sien. Pour contourner ce problème, utilisez l’entête 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( {
    userAgent: '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

En PHP, vous pouvez identifier votre agent utilisateur à l’aide d’un code tel que celui-ci :

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

cURL

Ou, si vous utilisez cURL :

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

Python

En Python, vous pouvez utiliser la bibliothèque Requests pour définir un en tête :

import requests

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

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

Ou, si vous souhaitez utiliser SPARQLWrapper comme dans 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()

Notes

  1. Archives Wikitech-l de février 2010 par sujet
  2. Agent utilisateur : - Wikitech-l - lists.wikimedia.org
  3. API:FAQ - MediaWiki
  4. Agent utilisateur [Wikitech-l] :
  5. Précisions sur ce qui est nécessaire pour « identifier le bot » dans l’agent utilisateur du bot ?
  6. gmane.science.linguistics.wikipedia.technical/83870 (lien mort)

Voir aussi