11521 sujets

JavaScript, DOM et API Web HTML5

bonjour à tou(te)s

comment autoriser l'accès "distant" avec ajax en javascript ?

var srv=new XMLHttpRequest();
srv.onload=function() { alert(srv.response); };
srv.withCredentials=true;
srv.open("POST","http://....");
// ou "GET", même erreur
srv.setRequestHeader("Access-Control-Allow-Origin","*");
srv.send();


a écrit :
erreur :

Blocage d’une requête multiorigines (Cross-Origin Request) :
la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http:/...
Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant. Code d’état : 405.


merci d'avance
Modifié par bul (11 Oct 2024 - 11:33)
je tentais d'accéder à ma freebox ( mini 4k )
( lien : http://mafreebox.freebox.fr )
depuis un .html local ( bien entendu )

merci pour le lien, que je n'avais
pas trouvé, je vais lire
et je vous dirais ce qu'il en est
@+
bien, je n'y arrive pas
après divers essais, dernière tentative avec fetch :

fetch('http://mafreebox.freebox.fr/api_version',{
	headers: {
		'Accept':'application/xml',
		'Access-Control-Allow-Origin':'*',
		'mode':'cors'
	    }
	})
    .then(r => {
        if (r.ok) {
            alert(r.json());
        } else {
            alert('erreur-1'+r);
        }
    })
    .then(posts => {
        alert(posts);
    })
    .catch(e => {
        alert('erreur-2:'+e)
    })


quelque chose m'échappe...
toujours la même erreur

Blocage d’une requête multiorigines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://mafreebox.freebox.fr/api_version. Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant. Code d’état : 404.

je continue à chercher...
Modifié par bul (12 Oct 2024 - 10:10)
merci de la piste proposée,
j'ai déjà tenté https, d'autres adresses, d'autres méthodes, paramètres...
exemple :
async function app() {
	let response=await fetch('https://mafreebox.freebox.fr/api_version',{
		method: 'POST',
		headers: {
			'Access-Control-Allow-Headers':'Origin,X-Requested-With,Content-Type,Accept',
			'Content-Type':'application/xml;charset=utf-8',
			'Access-Control-Allow-Origin':'*',
			'mode':'cors'
		},
		body:'<?xml version="1.0"?><html></html>'
	});
	let result=await response.json();
	alert(result.message);
}
app();


je ne comprends pas tout...
Modifié par bul (12 Oct 2024 - 13:03)
Salut,

Tu peux tenter ce que tu veux côté client, si ton serveur n'est pas configuré correctement il peux refuser toutes tes requêtes.

Ceci dit, c'est pas forcément le cas. Il y a une section dans l'article que je t'ai donné, qui parle des requêtes dite "simples" et les requêtes qui nécessitent une requête préliminaire. Celles-ci te donneront la réponse entre-autre Smiley smile
Modifié par Anymah (14 Oct 2024 - 17:43)
merci, mais franchement, beaucoup
trop vague, pas très clair, pour
que je puisse comprendre
je me suis rabattu sur un script python,
ça va mieux, il me reste à trouver comment,
par exemple, changer de chaîne
@+
Administrateur
A priori c'est plutôt le serveur qui doit renvoyer l'en-tête Access-Control-Allow-Origin, pas le navigateur qui effectue la requête.

Cela se voit dans les devtools navigateur (onglet réseau ou network).

Sinon effectivement, un langage back-end (Python, PHP...) n'aura pas ce besoin.
Meilleure solution
bon, on va donc considérer que javascript n'est pas, telle quelle, la solution ( vu des pistes en transitant par un site intermédiaire pour passer avec php ! )

la doc sur l'api freebox, quand on trouve quelques bribes, étant tellement peu claire, alambiqué, datant souvent, incomplète... que ce n'est pas gagné, quel que soit la manière d'aborder l'api
@+