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 :

[D2007] Erreur "HTTP/1.1 400 Bad Request" avec IdHttp


Sujet :

Web & réseau Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 663
    Points : 6 949
    Points
    6 949
    Par défaut [D2007] Erreur "HTTP/1.1 400 Bad Request" avec IdHttp
    Depuis quelques jours, l'appel à un webservice externe ne fonctionne plus.
    On obtient "HTTP/1.1 400 Bad Request" et rien d'autre.

    C'est un simple appel en GET (https://urlenquestion/CARD/12345789) avec un jeton en "Authorization".
    Le jeton est préalablement obtenu avec un appel d'une autre fonction en POST qui fonctionne toujours. Donc, on arrive toujours à attaquer le webservice.

    Ce qui fonctionnait jusqu'à il y a quelques jours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IdIOHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];
    IdHttp.IOHandler := IdIOHandler;
     
    IdHTTP.Request.Accept := 'application/json';
    IdHttp.Request.ContentType := 'application/json';
    IdHttp.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + sJeton;   // << chaine qui contient le jeton préalablement récupéré.
    IdHttp.Request.CharSet := 'UTF-8';
     
    IdHttp.Get(TIdURI.UrlEncode(sURL + sRequete), Reponse);
    Par contre, avec postman (et arc), l'appel fonctionne toujours.
    Le jeton est paramétré comme ça :
    Nom : postman.png
Affichages : 375
Taille : 27,3 Ko

    Sachant que :
    - l'application cliente en delphi 2007 n'a pas changé.
    - le webservice n'aurait pas été modifié. J'ai cru comprendre qu'il est hébergé sur azure.
    - le certificat est toujours valide.

    J'ai essayé de comparer les propriétés du style ("Content-Type", "Accept", ...) mais je ne vois pas ce qui pourrait soudain causer le pb.
    Si quelqu'un a une piste à explorer, je suis preneur ...
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (11.6 - 14.6)

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    peut-être sslvTLSv1_2 avec un serveur qui serait passé en TLS 1.3 ?

    tu peux tester avec Indy SChannel qui supporte TLS 1.3

    https://github.com/tothpaul/Delphi/t.../Indy.SChannel
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 663
    Points : 6 949
    Points
    6 949
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    peut-être sslvTLSv1_2 avec un serveur qui serait passé en TLS 1.3 ?
    Le serveur acceptait même TLS 1.0 (parait-il). Donc, le pb ne devrait pas être là.

    J'ai un collègue qui a trouvé ce qu'il fallait ajouter pour que ça remarche comme avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          IdHttp.Request.CustomHeaders.FoldLines := False;      // << La ligne magique qui change tout.
          IdHttp.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + sJeton;
    Donc à priori, pb résolu.
    Si quelqu'un connait la signification de cette ligne (histoire de m'instruire ), ça m'intéresse ...


    Sinon, autre info :
    J'avais testé d'extraire le code d'interrogation du webservice pour le mettre dans un projet de test en D10.3 (rigoureusement le même code).
    Et ça fonctionnait bien (sans la nouvelle ligne).
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (11.6 - 14.6)

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    je suppose que c'est le fait de spliter les lignes trop longues...peut-être que ton jeton est mal découpé et arrive incorrectement au serveur.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 426
    Points : 24 790
    Points
    24 790
    Par défaut
    FoldLines c'est un truc pour les vieux serveurs avec Indy 9, c'est pour mettre sur plusieurs lignes si l'entête est trop long qui dépasse FoldLength qui est défini à 78 + CRLF, oui la bonne vieille limite de 80 colonnes
    Sauf qu'avec Indy 10, FoldLines est ne devrait pas avoir d'impact en HTTP,
    normalement, cela ne devrait pas avoir d'effet puis que FoldLength a une valeur infinie en HTTP, c'est une valeur pour MIME à 78 (RFC 2045) ou encore plus vieux le RFC 822

    Du coup, sur le jeton, cela doit ajouter un retour à la ligne, peut-être même un espace pour indiquer un entête sur plusieurs lignes qui est supporté par MIME mais pas par HTTP

    le sJeton est bien une chaine Base64, parce que Indy se base un peu trop souvent sur des astuces de caractères de substitution qui font bien déconner ce genre de code d'alignement

    Je l'ai eu récemment sur des . tout seul sur ligne dans un corps de mail récupéré via GRAPH et lu via un TIdMessage qui lui s'attend à échappement en .. si ce n'est pas la vraie fin du mail, ce qui fait le TIdPOP3, TIdIMAP4 ... et que j'ai du reprendre en GRAPH MAIL.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Apache2.4 mod_evasive HTTP/1.1 400 Bad Request
    Par Invité dans le forum Apache
    Réponses: 4
    Dernier message: 06/12/2018, 00h15
  2. HTTP/1.1 400 Bad Request curl
    Par new70 dans le forum Unix
    Réponses: 0
    Dernier message: 24/03/2015, 16h58
  3. [WD12] HTTPRequete() et HTTP/1.0 400 Bad request
    Par zouzoukha dans le forum WinDev
    Réponses: 3
    Dernier message: 18/05/2012, 17h39
  4. [Erreur HTTP 400] Bad request.
    Par ZeKiD dans le forum Subversion
    Réponses: 0
    Dernier message: 16/08/2011, 16h36
  5. C++ Requete GET Http Erreur 400 Bad Request
    Par gy0m76 dans le forum C++
    Réponses: 2
    Dernier message: 02/07/2008, 16h49

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