IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IGN API Géoportail Discussion :

alticodage wrong referer


Sujet :

IGN API Géoportail

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Points : 35
    Points
    35
    Par défaut alticodage wrong referer
    Bonjour,
    Je cherche à utiliser le nouveau service de récupération de l'altitude via les coordonnées d'un point. Mais j'ai une erreur "wrong referer".
    J'ai du créer un nouveau contrat pour mon domaine car impossible d'ajouter ce service sur un ancien contrat existant.
    J'ai bien mis la nouvelle clé dans l'url du service REST. Mais le service me retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    traiteResult({"http":{"status":403,"error":"<ExceptionReport><Exception exceptionCode=\"MissingRights\">Wrong referer</Exception></ExceptionReport>"}, "xml":null})
    Voici le code que j'utilise pour mon test (en php):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $response = file_get_contents('http://wxs.ign.fr/ma_cle/alti/rest/elevation.json?lon=1.104943&lat=45.946521&zonly=true&callback=traiteResult&output=json');
    echo $response;
    Mon objectif est ensuite de traiter la réponse pour l'inclure dans un json plus complet à traiter en JS.
    Je n'arrive pas à savoir si le pb vient de l'utilisation du service avec "file_get_contents" ou s'il y a un soucis avec la clé.
    Merci pour vos lumières.

  2. #2
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Bonjour,

    l'erreur "wrong referer" signifie que l'information de referer véhiculée dans la requête HTTP envoyée par votre script php au service wxs.ign.fr ne correspond pas à celle renseignée lorsque vous avez pris votre contrat.

    Ici, la requête est envoyée par le script php (côté serveur donc) et non par le navigateur qui charge la page. Il est donc fort probable que l'entête referer ne soit pas l'URL de déploiement du site.

    Je voie 2 solutions :

    1. vous trouvez quelle est la valeur de l'entête referer (s'il y en a une) envoyée par le script PHP et vous prenez un nouveau contrat avec comme URL la valeur que vous avez trouvée ;

    2. vous changez de sécurisation pour votre clef en prenant par exemple une sécurisation par adresse IP (celle du serveur) au lieu d'un sécurisation par referer.


    Rques :

    1. Tout cela étant dit, je trouve étonnant que l'interrogation du service d'altitude se fasse côté serveur si les coordonnées d'entrée sont issues du navigateur. Est-ce le cas ? Si oui, pourquoi ne pas traiter avec le service directement depuis le client en javascript ?

    2. Si attaquez le service en JSONP, je vous invite à consulter cette discussion :

    http://www.developpez.net/forums/d14...etourne-403-a/

    car vous allez vite être confronté à un nouveau PB de syntaxe de json.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    Merci pour votre réponse.
    Le referer de la requete (via firebug) : http://mondomaine.fr/localisation/
    L'url enregistrée dans mon contrat ign : http://mondomaine.fr
    A noter que l'application web en question affiche les cartes en wmts avec la même clef et que tout fonctionne bien.

    J'utilise une requête serveur car je remonte via une réponse json, un ensemble d'informations recueillies dans postgis (communes, zones à status, etc...) via un intersect avec le point choisi par l'utilisateur dans l'interface client. Je souhaite que mon application soit compatible France entière, d'où la requête altitude via le service alticodage plutôt que de charger un mnt trop lourd dans postgis.
    Merci pour le lien, je m'en était inspiré pour faire mes tests mais je suis passé en php pour regrouper mes interrogations sur les caractéristiques du point choisis.

    Est-ce que le fait d'avoir deux contrats sur le même domaine peut créer des interférences ? En effet, impossible d'ajouter la ressource alticodage à mon précédent contrat, c'est en créant un nouveau contrat que j'ai pu obtenir cette ressource.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 119
    Points : 1 764
    Points
    1 764
    Par défaut
    Le "HTTP_REFERER" est bien forcé à "http://mondomaine.fr" dans le code php ?
    cf exemple 4 de http://fr2.php.net/file_get_contents

  5. #5
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par gilgil Voir le message
    Le referer de la requete (via firebug) : http://mondomaine.fr/localisation/
    L'url enregistrée dans mon contrat ign : http://mondomaine.fr
    A noter que l'application web en question affiche les cartes en wmts avec la même clef et que tout fonctionne bien.
    ça m'étonne que Firebug vous permette de tracer des requêtes envoyées par le serveur... Est-ce que c'est bien la requête vers wxs.ign.fr qui a cet entête referer ?

    J'utilise une requête serveur car je remonte via une réponse json, un ensemble d'informations recueillies dans postgis (communes, zones à status, etc...) via un intersect avec le point choisi par l'utilisateur dans l'interface client. Je souhaite que mon application soit compatible France entière, d'où la requête altitude via le service alticodage plutôt que de charger un mnt trop lourd dans postgis.
    OK, du coup je comprends mieux l'idée.

    Merci pour le lien, je m'en était inspiré pour faire mes tests mais je suis passé en php pour regrouper mes interrogations sur les caractéristiques du point choisis.
    Cela n'empêche pas que une fois le problème de referer résolu, le service répondra du JSON dont la syntaxe ne sera pas bonne, ce qui fera planter la fonction javascript de callback : il faut utilsier le service qui répond en xml pour bénéficier de l'enrobage en JSONP

    Est-ce que le fait d'avoir deux contrats sur le même domaine peut créer des interférences ? En effet, impossible d'ajouter la ressource alticodage à mon précédent contrat, c'est en créant un nouveau contrat que j'ai pu obtenir cette ressource.
    Aucune interférence à craindre de ce côté là.


    Citation Envoyé par mga_geo Voir le message
    Le "HTTP_REFERER" est bien forcé à "http://mondomaine.fr" dans le code php ?
    cf exemple 4 de http://fr2.php.net/file_get_contents
    C'est sans doute la bonne façon de faire pour résoudre le problème (solution n°3).

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par mga_geo Voir le message
    Le "HTTP_REFERER" est bien forcé à "http://mondomaine.fr" dans le code php ?
    cf exemple 4 de http://fr2.php.net/file_get_contents
    Bonjour,
    Je ne suis pas sur de bien comprendre. Tout ce que je trouve pour "forcer" le Referer me dit en gros que ce n'est pas possible.
    Et je ne comprends pas pourquoi il faut faire ça puisque c'est bien le serveur qui interroge le service alticodage. Le referer ne devrait donc pas avoir à être forcé.

    J'ai tout de même testé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Création d'un flux
    $opts = array(
      'http'=>array(
        'method'=>"GET",
        'header'=>" header('HTTP_REFERER: http://mondomaine.fr');"
      )
    );
    
    $context = stream_context_create($opts);
    
    // Accès à un fichier HTTP avec les entêtes HTTP indiqués ci-dessus
    
    $response = file_get_contents('http://wxs.ign.fr/ma_cle/alti/rest/elevation.json?lon=1.104943&lat=45.946521&zonly=true&callback=traiteResult&output=json', false, $context);
    Mais ça ne change rien. la réponse est la même.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Points : 35
    Points
    35
    Par défaut
    ça m'étonne que Firebug vous permette de tracer des requêtes envoyées par le serveur... Est-ce que c'est bien la requête vers wxs.ign.fr qui a cet entête referer ?
    Effectivement, firebug me donne la requete vers mon fichier php : http://mondomaine.fr/localisation/findloc.php
    Du coup, lorsque le script php interroge le service, est-ce qu'il passerait le client comme referer ?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 119
    Points : 1 764
    Points
    1 764
    Par défaut
    Par défaut le script php ne positionne pas le referer.
    Les scripts de proxy le font, il est possible de s'en inspirer.
    Ou de tester cette variante :
    <?php
    $header[] = "Accept: text/xml,application/xml,application/json,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
    $header[] = "Cache-Control: max-age=0";
    $header[] = "Connection: keep-alive";
    $header[] = "Keep-Alive: 300";
    $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
    $header[] = "Accept-Language: en-us,en;q=0.5";
    $referer = 'referer';
    $opts = array('http'=>array(
    'method'=>"GET",
    'header'=>implode('\r\n',$header)."\r\n".
    "Referer: $referer\r\n",
    'user_agent'=> "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8"
    ));
    $context = stream_context_create($opts);
    // Accès à un fichier HTTP avec les entêtes HTTP indiqués ci-dessus
    $response = file_get_contents('http://wxs.ign.fr/clé/alti/rest/elevation.json?lon=1.104943&lat=45.946521&zonly=true&callback=traiteResult&output=json', false, $context);

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Points : 35
    Points
    35
    Par défaut
    Marci pour votre patience mais je n'arrive à rien. j'ai testé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    
    $opts = array('http'=>array(
    'method'=>"GET",
        "Cache-Control: max-age=0".
        "Connection: keep-alive".
        "Keep-Alive: 300".
        "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7".
        "Accept-Language: en-us,en;q=0.5".
        "Referer: http://mondomaine.fr/localisation/test.php\r\n"
    ));
    $context = stream_context_create($opts);
    // Accès à un fichier HTTP avec les entêtes HTTP indiqués ci-dessus
    $response = file_get_contents('http://wxs.ign.fr/macle/alti/rest/elevation.json?lon=1.104943&lat=45.946521&zonly=true&callback=traiteResult&output=json', false, $context);
    
    echo $response;
    
    ?>
    Si j'ouvre l'url http://mondomaine.fr/localisation/test.php, il me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    traiteResult({"http":{"status":403,"error":"Wrong referer"}, "xml":null})

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Points : 35
    Points
    35
    Par défaut
    j'ai testé en copiant le code de la page http://wnat.fr/ALTI.html# sur mon serveur et en mettant ma clé, ça fonctionne. Donc ce n'est pas un pb de clé mais bien un soucis de referer dans le code php. Le pb c'est que je travaille à l'aveugle. je n'arrive pas à voir quel est le réferer transmis par le script php au serveur wxs.ign.fr
    Est-ce qu'il pourrait y avoir une config qui manque dans le php.ini ?

Discussions similaires

  1. Changemet serveur + https => Wrong referer
    Par jarod1990 dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 03/03/2015, 15h15
  2. Wrong referer lors du passage d'une clé de dev à une clé de prod
    Par Althos dans le forum IGN API Géoportail
    Réponses: 5
    Dernier message: 09/05/2014, 14h44
  3. Geocodage et "Wrong Referer"
    Par bounssy dans le forum IGN API Géoportail
    Réponses: 7
    Dernier message: 30/09/2012, 23h02
  4. MissingRights Wrong referer
    Par snibor dans le forum IGN API Géoportail
    Réponses: 15
    Dernier message: 28/09/2012, 14h59
  5. Réponses: 6
    Dernier message: 12/05/2008, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo