J'utilise l'API fetch
dans React, et je récupère certaines données d'un point de terminaison JSON.
Dans le cadre de mes demandes, je souhaite envoyer une chaîne User-Agent
Personnalisée. Actuellement, lorsque j'inspecte mes demandes, la chaîne UA est:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Comme je passe des en-têtes à chaque demande, je me suis dit que j'allais simplement ajouter User-Agent
À l'objet en-têtes, comme il est dit dans diverslieux en ligne :
fetch(url, {
Accept: 'application/json',
'Content-Type': 'application/json',
'User-Agent': 'MY-UA-STRING' // <---
})
Mais ça ne marche pas. J'ai le sentiment que c'est à cause d'un bogue dans l'API de récupération, comme indiqué ici et ici et ici .
Quelqu'un a-t-il un moyen de passer l'AU dans le cadre de headers
en utilisant fetch
?
Après quelques tests, Chrome a en effet un bug avec l'en-tête User-Agent.
Cela est probablement dû au fait que l'en-tête User-Agent était sur la liste des en-têtes non autorisés il n'y a pas longtemps (mi-2015).
Étant donné que cet en-tête particulier a récemment été supprimé de la liste des en-têtes non autorisés, Firefox (à partir de la version 43) vous permettra de modifier l'agent utilisateur dans un appel de récupération, mais Chrome ne le fera pas.
Voici le bogue Firefox , et le bogue Chrome
La raison pour laquelle il a été interdit en premier lieu, c'est qu'il n'y a vraiment aucune bonne raison d'utiliser l'en-tête User-Agent pour envoyer des données arbitraires, il devrait être utilisé pour envoyer le User-Agent réel et les demandes dans le navigateur comme Fetch of XMLHttpRequest ne devrait vraiment avoir aucune bonne raison d'usurper l'agent utilisateur de toute façon.
Lorsque le bogue sera corrigé dans Chrome est une supposition, mais c'est en effet un bogue car la liste des en-têtes interdits ne répertorie plus l'en-tête User-Agent, et il devrait changer lorsqu'il est spécifié dans le options objet de Fetch.
En tant que sidenote, vous devriez généralement créer les en-têtes en utilisant Interface d'en-têtes , et les inclure dans les options options sous la touche headers
let headers = new Headers({
"Accept" : "application/json",
"Content-Type" : "application/json",
"User-Agent" : "MY-UA-STRING"
});
fetch(url, {
method : 'GET',
headers : headers
// ... etc
}).then( ...