Je crée une application électronique et j'ai besoin d'appeler des API où le fournisseur d'API n'a pas activé CORS. La solution généralement proposée consiste à utiliser un proxy inverse, ce qui est trivial à faire lors de l'exécution locale en utilisant un nœud et des cors-n'importe où comme ceci:
let port = (process.argv.length > 2) ? parseInt (process.argv[2]) : 8080;
require ('cors-anywhere').createServer ().listen (port, 'localhost');
L'application peut ensuite être configurée pour proxy toutes les demandes via le proxy inverse sur localhost: 8080.
Donc, mes questions sont:
Est-il possible d'utiliser des nœuds et des cors n'importe où dans une application électronique pour créer un proxy inverse? Je ne veux pas forcer l'application à appeler un serveur distant.
Existe-t-il un moyen meilleur ou standard de le faire dans une application Electron? Je suppose que je ne suis pas le premier à rencontrer des problèmes CORS. :)
Remplacez l'en-tête avant d'envoyer une demande comme celle-ci
const filter = {
urls: ['*://*.google.com/*']
};
const session = electron.remote.session
session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => {
details.requestHeaders['Origin'] = null;
details.headers['Origin'] = null;
callback({ requestHeaders: details.requestHeaders })
});
mettre ces codes dans le processus de rendu
Je viens d'avoir ce problème aujourd'hui les appels d'API avec axios dans une React fournie avec Electron en retourne 4
D'après ce que je peux voir, les appels Electron agissent comme des appels normaux aux URL de l'API, ce qui signifie qu'ils ne sont pas affectés par CORS.
À présent, lorsque vous encapsulez vos appels avec un proxy CORS et effectuez un appel régulier vers le proxy, il devrait afficher une erreur 400 car ce n'est pas un appel CORS. Ce fil explique pourquoi cors-Anywhere répond comme ça => https://github.com/Rob--W/cors-anywhere/issues/39
J'ai en fait supprimé mes proxys CORS de l'application avant la construction d'Electron. J'ai toujours besoin du proxy CORS pour le développement car je teste dans le navigateur.
J'espère que cela t'aides.