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 :

Geocode et lib Curl : 302 found


Sujet :

IGN API Géoportail

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Geocode et lib Curl : 302 found
    Bonjour,

    J'essaye de mettre en place un système de géocode d'adresse avec la librairie Curl en PHP.
    Actuellement, impossible d'obtenir un XML en retour, juste un message "302 found".

    Voici le code que j'utilise :
    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
    19
    <?php
    $requesturl = 'http://wxs.ign.fr/MYKEY/geoportail/ols?';
    $requestxml = '<?xml version="1.0" encoding="UTF-8"?><XLS xmlns:xls="http://www.opengis.net/xls" xmlns:gml="http://www.opengis.net/gml" xmlns="http://www.opengis.net/xls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="http://www.opengis.net/xls http://schemas.opengis.net/ols/1.2/olsAll.xsd"><RequestHeader/><Request requestID="1" version="1.2" methodName="LocationUtilityService"><GeocodeRequest returnFreeForm="false"><Address countryCode="StreetAddress"><StreetAddress><Street>1 rue Marconi</Street></StreetAddress><Place type="Municipality">Metz</Place><PostalCode>57000</PostalCode></Address></GeocodeRequest></Request></XLS>';
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_URL, $requesturl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', 'Content-length:'.strlen($requestxml)));
    curl_setopt($ch, CURLOPT_REFERER, 'http://localhost');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $requestxml);
    $reponse = curl_exec($ch);
    
    echo $reponse;
    $xmlr = new SimpleXMLElement($reponse);
    foreach($xmlr->entry as $coord){
    	echo $coord->title . "\n";
    }
    ?>
    Mon referer est en localhost, le problème peut il venir de là ?

    Cordialement,

    G.

  2. #2
    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
    L'origine de l'erreur est une "redirection" effectuée sur le service ols de l'IGN: on lui pose une question en http et il répond en https.
    Pour contourner ce comportement douteux (si le service est effectivement disponible en http), il faut faire la requête en https ou demander à curl de suivre les redirections.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse.

    J'ai rajouté cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    Plus de message 302 found, plus rien ne s'affiche maintenant. J'ai vu que certain sur le forum ont réussi mais, leurs posts remontent à quelques années, ce n'est plus possible maintenant ?

  4. #4
    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,

    je viens de copier votre code tel quel (hormis la clef que j'ai remplacée par une associée au referer http://localhost) et sans le rajout (curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);) dans une page php et j'obtiens le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    49.103415 6.215576
    r marconi Metz Projection ADRNIVX_0000000273829885 57 6.215576;49.103415;6.215576;49.103415 Metz 57463 FXX TRONROUT0000000010343573 57070
    => un résultat correct, le service a répondu en http, comme attendu lorsqu'on l'interroge en http.

    Le problème doit être ailleurs. Avez-vous plus d'éléments a nous communiquer :

    * console "réseau" de firebug ou de vos outils de développement associés à votre navigateur ?
    * logs serveurs ?

    Merci,

    Gilles

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci, je pense que sur un serveur ça marchera alors.
    J'utilise WAMP, le problème viens peut être de là.

    Log Apache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    127.0.0.1 - - [08/Sep/2014:11:18:08 +0200] "GET /geoc/geoc.php HTTP/1.1" 200 13714
    Pour la console :
    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
    19
    20
    Remote Address:127.0.0.1:80
    Request URL:http://localhost/geoc/geoc.php
    Request Method:GET
    Status Code:200 OK
    Request Headersview source
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Encoding:gzip,deflate,sdch
    Accept-Language:en-US,en;q=0.8
    Cache-Control:max-age=0
    Connection:keep-alive
    Host:localhost
    User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36
    Response Headersview source
    Connection:Keep-Alive
    Content-Length:13714
    Content-Type:text/html
    Date:Mon, 08 Sep 2014 09:19:03 GMT
    Keep-Alive:timeout=5, max=100
    Server:Apache/2.4.9 (Win64) PHP/5.5.12
    X-Powered-By:PHP/5.5.12

  6. #6
    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
    Gilles,

    Je suis certain qu ce matin le service répondait en https, je n'ai pas conservé la trace wireshark, mais le http 302 ne laisse pas beaucoup de doutes.
    Je n'ai plus ce comportement actuellement.

    Geiko,
    Pour progresser, il faut avoir une trace avec un outil type wireshark des échanges IP entre le PC et le serveur API.

  7. #7
    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
    @marc :

    A ma connaissance, il n'y a pas eu d'interventions sur les services entre ce matin (tôt) où tu as constaté les HTTP 302 et ce matin (+ tard) où je ne les ai pas constatés. Aucune anomalie ne nous a été remontée non plus par nos sondes... Je vais me renseigner plus en détail pour savoir s'il s'est passé quelque chose.

    @Geiko

    Merci, je pense que sur un serveur ça marchera alors.
    J'utilise WAMP, le problème viens peut être de là.
    WAMP est un serveur (apache inside). Il n'y a pas de raison que votre script ne marche pas avec ce serveur.

    Je rejoins Marc sur le fait que les logs fournis ne sont pas suffisants et qu'il faudrait avoir une trace des échanges entre le serveur apache et le serveur ign (wxs.ign.fr).

    Avez-vous essayé de rendre votre script php plus "verbeux" (cf. http://blog.teamtreehouse.com/how-to-debug-in-php ou autre ressource sur internet sur le sujet) ?
    En parallèle, vous pouvez m'envoyer votre clef en MP afin que je vois dans nos logs si vos requêtes sont arrivées jusqu'à nous et comment elles-ont été traitées.

  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
    La trace du matin, il va falloir poser des question à Atos Origin
    #
    U 192.168.0.51:63718 -> 192.168.0.254:53
    t............wxs.ign.fr.....
    #
    U 192.168.0.254:53 -> 192.168.0.51:63718
    t............wxs.ign.fr..............@...gpp3-wxs...(.........#.gpp3-wxs-ig
    n-fr.aw.atosorigin.com..?...........\...O...........ns4.atos.net..O........
    ...ns1.ext.origin-it.].O...........ns2...O...........ns3...O...........ns3.
    .
    ####
    T 192.168.0.51:57138 -> 160.92.169.129:80 [AP]
    POST /11pdyr6bqy0vvkjnywrhmqc2/geoportail/ols HTTP/1.1..User-Agent: curl/7.
    28.1..Host: wxs.ign.fr..Accept: */*..Referer: localhost..Content-Type: text
    /xml..Content-Length: 547....<?xml version="1.0" encoding="UTF-8"?><XLS xml
    ns:gml="http://www.opengis.net/gml" xmlns="http://www.opengis.net/xls" xmln
    s:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schema
    Location="http://www.opengis.net/xls http://schemas.opengis.net/ols/1.2/ols
    All.xsd">.<RequestHeader/>.<Request requestID="1" version="1.2" methodName=
    "LocationUtilityService">.<GeocodeRequest returnFreeForm="false">.<Address
    countryCode="CadastralParcel">.<freeFormAddress>974090001BE0088</freeFormAd
    dress>.</Address>.</GeocodeRequest></Request></XLS>
    #
    T 160.92.169.129:80 -> 192.168.0.51:57138 [A]
    ......
    #
    T 160.92.169.129:80 -> 192.168.0.51:57138 [AP]
    HTTP/1.1 302 Moved Temporarily..Server: nginx..Date: Tue, 09 Sep 2014 05:31
    :56 GMT..Content-Type: text/html..Content-Length: 154..Connection: keep-ali
    ve..Location: https://wxs.ign.fr/11pdyr6bqy0vvkjny...portail/ols..E
    xpires: Tue, 30 Sep 2014 05:31:56 GMT..Cache-Control: max-age=1814400....<h
    tml>..<head><title>302 Found</title></head>..<body bgcolor="white">..<cente
    r><h1>302 Found</h1></center>..<hr><center>nginx</center>..</body>..</html>
    ..

  9. #9
    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
    Merci Marc, j'ai finalement reproduit le comportement. J'investigue...

  10. #10
    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 Tout s'explique !
    Marc et Geiko :

    les clefs que vous utilisez sont des clefs protégées par login/mdp. Dans ce cas, il y a effectivement une redirection vers https pour que la transmission de ces infos soit cryptée. Pour les autres types de clef (referer, user-agent, adresse IP), le dialogue continue en http.

    @Geiko :

    votre exemple ne marche pas car : non seulement vous êtes redirigés, mais aussi vous ne fournissez pas les informations d'authentification de la clef. Dans la mesure où la clef est utilisée par un serveur (script php), le mieux est peut-être d'opter pour une clef sécurisée par adresse IP (celle de votre serveur) plutôt que par login / mdp.

  11. #11
    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
    Dans le corps du POST, la clé correspondant au Referer est visible car le paquet est émis en http avant d'avoir le redirect.
    Je n'ai ce comportement de redirect qu'avec un Referer=localhost.

  12. #12
    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 mga_geo Voir le message
    Dans le corps du POST, la clé correspondant au Referer est visible car le paquet est émis en http avant d'avoir le redirect.
    Je n'ai ce comportement de redirect qu'avec un Referer=localhost.
    De manière générale, on préconise d'utiliser les clefs sécurisées login/mot de passe directement via les flux en HTTPS, de façon à ce que l'échange des login/mdp avec le serveur soit chiffré. Dans ce cas, il n'y a pas de redirect puisqu'on est déjà sur la bonne url.

    Peut-être ton application qui n'est pas derrière l'url localhost est elle déployée en https ?

  13. #13
    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
    Quand je fais des vérifications de clés, j'utilise la "ligne de commandes" avec curl:
    CLEF=envqmfphajkjina7h6g08pj8; REFERER=localhost
    URL="http://wxs.ign.fr/${CLEF}/geoportail/ols"
    curl -e ${REFERER} -o /tmp/proxy.html -d "$POST" -H "Content-Type: text/xml" -L "${url}"
    Effectivement si la clé n'est pas du type "web", cette procédure n'est pas correcte : mon erreur.
    Une réponse en http serait tout de même préférable.

Discussions similaires

  1. CURL Not found !
    Par apt dans le forum Bibliothèques et frameworks
    Réponses: 27
    Dernier message: 30/10/2011, 15h23
  2. Compiler un .c avec lib cURL en statique
    Par delete dans le forum Linux
    Réponses: 14
    Dernier message: 19/04/2009, 00h39
  3. Compiler un .c avec lib cURL en static
    Par delete dans le forum Linux
    Réponses: 0
    Dernier message: 07/03/2009, 23h58
  4. emplacement de la page 302 found
    Par anthonycosson dans le forum Apache
    Réponses: 1
    Dernier message: 15/05/2007, 12h41

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