Comment puis-je utiliser Tidhttp de faire une requête Get avec un paramètre appelé xml?

J'ai été avec succès à l'aide de Delphi 2010 de faire une requêtes http get, mais pour un service qui attend un paramètre appelé 'xml' la demande échoue avec un 'HTTP/1.1 400 Bad Request' erreur.

Je remarque que le fait d'appeler le même service et l'omission de la 'xml' paramètre fonctionne.

J'ai essayé ce qui suit, sans succès:

HttpGet('http://localhost/Service/Messaging.svc/SendReports/PDF?xml=<?xml version="1.0"?><email><message><to>[email protected]</to><from>[email protected]</from></message></email>&id=42&profile=A1');

...

function TReportingFrame.HttpGet(const url: string): string;
var
  responseStream : TMemoryStream;
  html: string;
  HTTP: TIdHTTP;
begin
  try
      try
        responseStream := TMemoryStream.Create;
        HTTP := TIdHTTP.Create(nil);
        HTTP.OnWork:= HttpWork;
        HTTP.Request.ContentType := 'text/xml; charset=utf-8';
        HTTP.Request.ContentEncoding := 'utf-8';
        HTTP.HTTPOptions := [hoForceEncodeParams];
        HTTP.Request.CharSet := 'utf-8';
        HTTP.Get(url, responseStream);
        SetString(html, PAnsiChar(responseStream.Memory), responseStream.Size);
        result := html;
      except
        on E: Exception do
            Global.LogError(E, 'ProcessHttpRequest');
      end;
    finally
      try
        HTTP.Disconnect;
      except
      end;
    end;
end;

Appelant la même url avec le nom du paramètre 'xml' renommée à autre chose, comme "xml2' ou 'nom', avec la même valeur que ci-dessus fonctionne également. J'ai aussi essayé plusieurs combinaisons du jeu de caractères, mais je pense que l'indy composant est en train de changer en interne.

MODIFIER

Le service attend:

[WebGet(UriTemplate = "SendReports/{format=pdf}?report={reportFile}&params={jsonParams}&xml={xmlFile}&profile={profile}&id={id}")]

Quelqu'un avait une expérience avec cela?

Grâce

OT: on pourrait appeler la TIdHTTP.Get surcharge qui retourne la chaîne et de l'affecter directement à la Result. Qui vous permettra de retirer la actuellement à une fuite de flux de la partie.
Fait. Tous les conseils sur le texte/xml charset/mauvais problème de demande?
1) Afficher les spécifications de services, comment il s'attend à ce que le paramètre à passer ? /// 2) avez-vous une référence programme de démonstration comme navigateur web que l'on peut appeler ce service avec succès ? /// 3) essayez de coder tous les non-valide les caractères à l'aide de un pour cent codage hexadécimal: en.wikipedia.org/wiki/Url#List_of_allowed_URL_characters /// 4) essayer de passer votre xml comme des mots codés en base64 stream en.wikipedia.org/wiki/MIME#Encoded-Word
Désolé, oui. Je peux appeler l'URL ci-dessus à partir d'un navigateur web. Je peux l'appeler à partir d' .Net applications avec la même URL, juste pas de Delphes. C'est la présence du paramètre appelé " xml " qui provoque des problèmes de Delphes.
URLEncode résultats dans HTTP 500 erreur de serveur

OriginalL'auteur reckface | 2013-07-25