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

Lazarus Pascal Discussion :

Interrogation d'un service IGN WPS via TFPHTTPClient


Sujet :

Lazarus Pascal

  1. #1
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 343
    Points : 536
    Points
    536
    Billets dans le blog
    2
    Par défaut Interrogation d'un service IGN WPS via TFPHTTPClient
    Bjr à vous,

    Je cherche à récupérer des altitudes via le service https://wxs.ign.fr/essentiels/alti/w...&version=1.0.0 en utilisant TFPHTTPClient


    (tutoriaux: https://geoservices.ign.fr/documenta...imetrique-rest)

    En GET vers https://wxs.ign.fr/essentiels/alti/r...00&zonly=false, çà marche

    En POST vers https://wxs.ign.fr/essentiels/alti/w...&version=1.0.0, je mets ceci dans mon TFPHTTPClient

    Dans mon instance de TFPHTTPClient, je vide son RequestHeaders et j'y mets les lignes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      FHttpClient.RequestHeaders.Clear;
      FHttpClient.RequestHeaders.Add('User-Agent: Mozilla/5.0 (compatible; fpweb)');
      FHttpClient.RequestHeaders.Add('Content-Type:text/xml; charset=UTF-8');
      FHttpClient.RequestHeaders.add('Accept:text/xml');
    et dans la requête POST, envoyée par Procedure TFPHTTPClient.FormPost(const URL : string; FormData: TStrings; const Response: TStrings), j'y mets les paramètres suivants:

    URL = https://wxs.ign.fr/essentiels/alti/w...&version=1.0.0
    FormData, un TStringList composé par mon appli
    Response, un TStringList initialisé et vidé

    Les lignes de mon FormData:
    Code XML : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?xml version="1.0" encoding="UTF-8"?>
    <wps:Execute version="1.0.0" service="WPS"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:"http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs"
      xmlns:wps="http://www.opengis.net/wps/1.0.0"
      xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml"
      xmlns:ogc="http://www.opengis.net/ogc"
      xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink"
      xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
      <ows:Identifier>gs:WPSLineElevation</ows:Identifier>
      <wps:DataInputs>
        <wps:Input>
          <ows:Identifier>lon</ows:Identifier>
          <wps:Data>
            <wps:LiteralData>
            -0.02500000|-0.02200000|-0.01900000|-0.01600000|-0.01300000|-0.01000000|-0.00700000|-0.00400000
            </wps:LiteralData>
          </wps:Data>
        </wps:Input>
        <wps:Input>
          <ows:Identifier>lat</ows:Identifier>
          <wps:Data>
            <wps:LiteralData>
            43.08600000|43.08800000|43.09000000|43.09200000|43.09400000|43.09600000|43.09800000|43.10000000
            </wps:LiteralData>
          </wps:Data>
        </wps:Input>
        <wps:Input>
          <ows:Identifier>sampling</ows:Identifier>
          <wps:Data>
            <wps:LiteralData>8</wps:LiteralData>
          </wps:Data>
        </wps:Input>
        <wps:Input>
          <ows:Identifier>format</ows:Identifier>
          <wps:Data>
            <wps:LiteralData>json</wps:LiteralData>
          </wps:Data>
        </wps:Input>
      </wps:DataInputs>
      <wps:ResponseForm>
        <wps:RawDataOutput>
          <ows.Identifier>result</ows.Identifier>
        </wps:RawDataOutput>
      </wps:ResponseForm>
    </wps:Execute>

    Le serveur IGN me retourne un code 200 OK, et la réponse XML suivante dans Response

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8"?>
    <ows:ExceptionReport version="1.1.0"
      xsi:schemaLocation="http://www.opengis.net/ows/1.1 https://wxs.ign.fr/alti/schemas/ows/1.1.0/owsAll.xsd"
      xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <ows:Exception exceptionCode="MissingParameterValue" locator="request">
        <ows:ExceptionText>Could not determine geoserver request from http request org.geoserver.platform.AdvancedDispatchFilter$AdvancedDispatchHttpRequest@c679618</ows:ExceptionText>
      </ows:Exception>
    </ows:ExceptionReport>

    Des pistes ?

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Hello d'après le message d'erreur il te manque un paramètre dans l'url de la requete soit dans le formData
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 343
    Points : 536
    Points
    536
    Billets dans le blog
    2
    Par défaut J'utilise pourtant l'URL mentionnée dans le tuto IGN
    Citation Envoyé par BeanzMaster Voir le message
    Hello d'après le message d'erreur il te manque un paramètre dans l'url de la requete soit dans le formData
    J'utilise pourtant l'URL https://wxs.ign.fr/CLEF/alti/wps?ser...&version=1.0.0 mentionnée dans le tutorial officiel https://geoservices.ign.fr/documenta...ique-rest#1894

    Ceci dit, le tuto est peut-être caduc. Le nombre de tutos périmés ou qui ne fonctionnent pas (exemples boiteux notamment) est hallucinant, y compris sur les sites officiels.

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    l'erreur que tu fais c'est d'utiliser un FormPost alors que c'est un Post qu'il faut faire en mettant le xml dans le RequestBody.
    Voici un code qui fonctionne chez moi :
    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
    21
    22
    23
    24
    25
    26
    27
    procedure TForm1.Button3Click(Sender: TObject);
    var
      MyHTTPRequest: TFPHTTPClient;
      MyURL: String;
      FormData: TStringList;
      Response: TStringList;
    begin
      FormData := TStringList.Create;
      FormData.LoadFromFile('FormData.xml');
      MyURL := 'https://wxs.ign.fr/essentiels/alti/wps?service=WPS&version=1.0.0';
      Response := TStringList.Create;
      Response.Clear;
      MyHTTPRequest := TFPHTTPClient.Create(self);
      MyHTTPRequest.RequestHeaders.Clear;
      MyHTTPRequest.RequestHeaders.Add('User-Agent: Mozilla/5.0 (compatible; fpweb)');
      MyHTTPRequest.RequestHeaders.Add('Content-Type: application/xml; charset=UTF-8');
      MyHTTPRequest.RequestHeaders.Add('Accept: text/xml');
      MyHTTPRequest.RequestBody := TRawByteStringStream.Create(FormData.Text);
      MyHTTPRequest.AllowRedirect := true;
      try
        MyHTTPRequest.Post(MyURL, Response);
        ShowMessage(Response.Text);
      finally
        FreeAndNil(MyHTTPRequest);
        FreeAndNil(Response);
      end;
    end;
    Mais dans la réponse il y a quelque chose qu'il n'aime pas dans le xml envoyé.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 343
    Points : 536
    Points
    536
    Billets dans le blog
    2
    Par défaut
    Chez moi, il me retourne ceci:

    Où se trouve la déclaration de TRawByteString ?

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    <ows:ExceptionReport version="1.0.0"
      xsi:schemaLocation="http://www.opengis.net/ows https://wxs.ign.fr/alti/schemas/ows/1.0.0/owsExceptionReport.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ows="http://www.opengis.net/ows">
      <ows:Exception exceptionCode="NoApplicableCode">
        <ows:ExceptionText>org.xmlpull.v1.XmlPullParserException: namespace prefix is required after xmlns:  when namespaces are enabled (position: START_DOCUMENT seen ...  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r\n  xmlns:"... @4:10) 
    namespace prefix is required after xmlns:  when namespaces are enabled (position: START_DOCUMENT seen ...  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r\n  xmlns:"... @4:10) </ows:ExceptionText>
      </ows:Exception>
    </ows:ExceptionReport>

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    C'est ce que j'ai aussi mais là c'est un problème dans le xml
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    c'est le début du fichier xml qui n'est pas bon : j'ai récupéré un exemple ici ce qui donne pour le xml :
    Code xml : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?xml version="1.0" encoding="UTF-8"?>
    <wps:Execute version="1.0.0" service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
      <ows:Identifier>gs:WPSLineElevation</ows:Identifier>
      <wps:DataInputs>
        <wps:Input>
          <ows:Identifier>lon</ows:Identifier>
          <wps:Data>
            <wps:LiteralData>
            -0.02500000|-0.02200000|-0.01900000|-0.01600000|-0.01300000|-0.01000000|-0.00700000|-0.00400000
            </wps:LiteralData>
          </wps:Data>
        </wps:Input>
        <wps:Input>
          <ows:Identifier>lat</ows:Identifier>
          <wps:Data>
            <wps:LiteralData>
            43.08600000|43.08800000|43.09000000|43.09200000|43.09400000|43.09600000|43.09800000|43.10000000
            </wps:LiteralData>
          </wps:Data>
        </wps:Input>
        <wps:Input>
          <ows:Identifier>sampling</ows:Identifier>
          <wps:Data>
            <wps:LiteralData>8</wps:LiteralData>
          </wps:Data>
        </wps:Input>
        <wps:Input>
          <ows:Identifier>format</ows:Identifier>
          <wps:Data>
            <wps:LiteralData>json</wps:LiteralData>
          </wps:Data>
        </wps:Input>
      </wps:DataInputs>
      <wps:ResponseForm>
        <wps:RawDataOutput>
          <ows.Identifier>result</ows.Identifier>
        </wps:RawDataOutput>
      </wps:ResponseForm>
    </wps:Execute>

    et voici ce que j'obtiens en réponse :
    {"elevations": [{"lon": -0.025,"lat": 43.086,"z": 554.11,"acc": 2.5},{"lon": -0.022,"lat": 43.088,"z": 472.94,"acc": 2.5},{"lon": -0.019,"lat": 43.09,"z": 440.27,"acc": 2.5},{"lon": -0.016,"lat": 43.092,"z": 414.81,"acc": 2.5},{"lon": -0.013,"lat": 43.094,"z": 409.81,"acc": 2.5},{"lon": -0.01,"lat": 43.096,"z": 407.07,"acc": 2.5},{"lon": -0.007,"lat": 43.098,"z": 406.92,"acc": 2.5},{"lon": -0.004,"lat": 43.1,"z": 402.68,"acc": 2.5}]}
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 343
    Points : 536
    Points
    536
    Billets dans le blog
    2
    Par défaut Ca marche mais 'Violation d'accès' sous Linux Mint au droit du Post()
    Ca marche mais 'Violation d'accès' sous Linux Mint au droit du Post()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try
        MyHTTPRequest.Post(MyURL, Response); // OK sous Windows, VA sur Linux
        ShowMessage(Response.Text);
      finally
        FreeAndNil(MyHTTPRequest);
        FreeAndNil(Response);
      end;

  9. #9
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 343
    Points : 536
    Points
    536
    Billets dans le blog
    2
    Par défaut TFPHTTPClient avec interrogation d'un service WXS: Ne fonctionne pas sous Linux
    Bjr à tous,

    Après reprise de mon extracteur d'altitude via un service IGN wxs, je constate que TFPHTTPClient fonctionne très bien avec une URL ordinaire. Par contre, dès que j'interroge le service wxs via les méthodes TFPHTTPClient.Get() ou TFPHTTPClient.Post(), le résultat de get() est une chaîne vide, alors que la même URL dans un navigateur me retourne du XML.

    Sous Windows: OK , sous Linux: KO

Discussions similaires

  1. comment accéder à un service web wsdl via JavaScript
    Par berber5 dans le forum Services Web
    Réponses: 2
    Dernier message: 13/06/2012, 15h05
  2. Connexion Service Web - BDD via Gestionnaire IIS
    Par Ryushine dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 12/09/2011, 17h24
  3. Interrogation simpliste du service OpenLS
    Par mga_geo dans le forum IGN API Géoportail
    Réponses: 9
    Dernier message: 29/04/2010, 08h11
  4. Comment interroger un Web Service en PL/SQL
    Par squallJ dans le forum Oracle
    Réponses: 2
    Dernier message: 19/08/2009, 11h31
  5. Réponses: 0
    Dernier message: 11/02/2009, 18h09

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