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}¶ms={jsonParams}&xml={xmlFile}&profile={profile}&id={id}")]
Quelqu'un avait une expérience avec cela?
Grâce
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
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'encoder les données de paramètre lors du passage via une URL,
TIdHTTP
ne sera pas encoder l'URL pour vous, par exemple:Ou:
OriginalL'auteur Remy Lebeau