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

Web & réseau Delphi Discussion :

IdHTTP envoi de string en russe et retour inexact de la réponse


Sujet :

Web & réseau Delphi

  1. #1
    Membre à l'essai
    Femme Profil pro
    Dev
    Inscrit en
    Mars 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 26
    Points : 17
    Points
    17
    Par défaut IdHTTP envoi de string en russe et retour inexact de la réponse
    Je lance des requête IdHTTP sur le site ThemovideB via son API en JSON dans mon application.
    Si je le fais en Anglais, allemand, italien, etc ... aucun souci ! Cela fonctionne parfaitement.
    Par contre, si je le fais en Russe, la requête ne me retourne pas le bon résultat.

    Le code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm8.FormActivate(Sender: TObject);
    var
    rq , str : string ;
     
    begin
    rq := 'http://api.themoviedb.org/3/search/movie?api_key=3b608fc11821e92cd2459320206a9d9b&query=Thunderball&language=eng' ;
    str := IdHTTP1.Get(rq);  // resultat CORRECT (anglais ...)
    rq := 'http://api.themoviedb.org/3/search/movie?api_key=3b608fc11821e92cd2459320206a9d9b&query=Шаровая+молния&language=ru' ;
    str := IdHTTP1.Get(rq);  // resultat INCORRECT
     
    end;


    Exemple :

    http://api.themoviedb.org/3/search/m...3;&language=ru

    Cette requête me donne pour résultat :
    {"page":1,"results":[],"total_pages":0,"total_results":0}
    Or, si je lance la même requête via mon navigateur (Firefox), le résultat est :

    {"page":1,"results":

    [{"adult":false,"backdrop_path":"/qd0jrqxFLCKkNruPuJ7zXuQRpKG.jpg","id":660,"original_title":"Thunderball","release_date":"1965-12-

    28","poster_path":"/52tIfv4BqTHE9U0sIhGQTPgDwBr.jpg","popularity":1.21043869805564,"title":"Шаровая

    молния","video":false,"vote_average":6.4,"vote_count":146}],"total_pages":1,"total_results":1}
    ... et donc CORRECT ...

    Autrement dit, il semble que la requête ne soit pas correctement "envoyé " au serveur, mais sa réponse est "bonne".


    Quelqu' un a une idée ??

    Delphi XE5 et Indy.

    Merci !

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 383
    Points : 2 996
    Points
    2 996
    Par défaut
    et avec un truc du genre:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
    IdHTTP1.Request.Charset := 'utf-8';
    ??

  3. #3
    Membre à l'essai
    Femme Profil pro
    Dev
    Inscrit en
    Mars 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Je viens d' essayer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm8.FormActivate(Sender: TObject);
    var
    rq , str : Unicodestring ;
    begin
     
    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
    IdHTTP1.Request.Charset := 'utf-8';
    rq :='http://api.themoviedb.org/3/search/movie?api_key=3b608fc11821e92cd2459320206a9d9b&query=Шаровая+молния&language=ru' ;
    str := IdHTTP1.Get(rq);
     
    end;
    Merci, mais non, cela ne fonctionne pas mieux.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Dev
    Inscrit en
    Mars 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Merci au modo d' avoir rajouté la balise code dans mon exemple, mais en fait quand on la mets, les caractères cyrilliques sont remplacés par leur équivalent HTML et mon code, du coup, n' a plus de sens ..
    Du coup, il faut bien lire :

    rq :='http://api.themoviedb.org/3/search/movie?api_key=3b608fc11821e92cd2459320206a9d9b&query=Шаровая+молния&language=ru' ;

  5. #5
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 490
    Points : 2 752
    Points
    2 752
    Billets dans le blog
    10
    Par défaut Peut etre que
    Le codage dans Delphi des caractères non cyrilliques est réalisé via des unicodeString
    Les caractères en cyrillique UTF8 "Little Indian" d'un fichier html sont convertis dans un autre format UTF 16
    D0 81 => 01 04
    D0 82 => 02 04 et ainsi de suite.
    Le problème est peut être là
    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
     
    <html>
    <head>
    <style>
    .titre {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 22px; background-color: #F2EFB7; font-weight: bold}
    .cyr   {font-family : "Courier New Cyr New"; text-align: left; font-size: 22px; background-color: #FFFFFF}
    body {  font-family: Verdana, Arial, Helvetica, sans-serif; margin: 0px}
    </style>
    </head>
    <body bgcolor="#F2EFB7">
    <table border="0" cellspacing="2" cellpadding="4" align="left">
    <tr>
    <td class="titre" valign="top">A B C D</td>
    <td class="cyr">&#x0401; &#x0402; &#x0403; &#x0404;</td>
    <td class="titre" valign="top">E F G H</td>
    <td class="cyr">&#x0405; &#x0406; &#x0407; &#x0408;</td>
    </tr>
    </table>
    </body>
    </html>

  6. #6
    Membre à l'essai
    Femme Profil pro
    Dev
    Inscrit en
    Mars 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Oula, cela s' avère assez difficile avec tous ces codages.

    Ce qui m' interloque c' est que la requête fonctionne parfaitement sous Firefox, mais pas avec IdHTTP.
    Quelqu' un sait-il quel est le codage envoyé par Firefox dans ce cas de figure, ou comment le détecter ? Il s'agirait d' UTF-16 ?
    Si j' arrive à avoir cela, peut-être pourrais-je configurer le composant IdHTTP de façon similaire ... non ?

    J' ai essayé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm8.FormActivate(Sender: TObject);
    var
    rq , str : string ;
    begin
    IdHTTP1.Request.Charset := 'utf-16';
    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
    rq :='http://api.themoviedb.org/3/search/movie?api_key=3b608fc11821e92cd2459320206a9d9b&query=Шаровая+молния&language=ru' ;
    str := IdHTTP1.Get(rq);
     
    end;
    Mais rien non plus ..

  7. #7
    Membre à l'essai
    Femme Profil pro
    Dev
    Inscrit en
    Mars 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Le plugin LiveHTTPHeader de Firefox me donne ceci pour la requete :

    ----------------------------------------------------------
    http://www.developpez.net/template/extra.php?r=2&f=1

    http://api.themoviedb.org/3/search/m...8F&language=ru

    GET /3/search/movie?api_key=3b608fc11821e92cd2459320206a9d9b&query=%D0%A8%D0%B0%D1%80%D0%BE%D0%B2%D0%B0%D1%8F+%D0%BC%D0%BE%D0%BB%D0%BD%D0%B8%D1%8F&language=ru HTTP/1.1
    Host: api.themoviedb.org
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Cookie: _ga=GA1.2.552520577.1414089608
    Connection: keep-alive
    If-None-Match: "020bd241ca8c85a434e7d429f6a04bf1"
    Cache-Control: max-age=0

    HTTP/1.1 200 OK
    access-control-allow-origin: *
    Cache-Control: public, max-age=10800
    Content-Type: application/json;charset=utf-8
    Date: Sun, 25 Jan 2015 18:44:48 GMT
    Etag: "020bd241ca8c85a434e7d429f6a04bf1"
    Server: nginx
    Status: 200 OK
    X-Memc: HIT
    X-Memc-Age: 2210
    X-Memc-Expires: 8590
    X-Memc-Key: cfcdc0d8877e113e16c56d2068cc90b7
    Content-Length: 358
    Connection: keep-alive
    ----------------------------------------------------------


    La requete envoyée est donc avec des '%D0%A8%D0%B0%D1%8' au lieu des caractères cyrillique.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Dev
    Inscrit en
    Mars 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    OK, j' ai trouvé ...
    il suffisait de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    str := IdHTTP1.Get(TIdURI.URLEncode(rq));

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi de mail depuis access avec retour sur actions
    Par clickandgo dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/04/2012, 11h03
  2. Contrôle d'une String et valeur de retour
    Par Tora21 dans le forum Débuter avec Java
    Réponses: 34
    Dernier message: 30/05/2011, 09h50
  3. Envoi de string en raw vers Imprimante : souci d'accents
    Par Arnard dans le forum Framework .NET
    Réponses: 0
    Dernier message: 15/11/2010, 16h40
  4. Envoi de String bluetooth
    Par faldar dans le forum Développement Mobile en Java
    Réponses: 0
    Dernier message: 21/02/2010, 11h34
  5. [Jquery] Envoi de données mais rien en retour.
    Par Hightuxdotnet dans le forum jQuery
    Réponses: 12
    Dernier message: 13/09/2008, 13h08

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