Wie kann ich Tidhttp verwenden, um eine Get-Anfrage mit einem Parameter namens xml zu stellen?
Ich habe Delphi 2010 erfolgreich verwendet, um http-Abrufanforderungen zu erstellen, aber für einen Dienst, der einen Parameter mit dem Namen "xml" erwartet, schlägt die Anforderung mit dem Fehler "HTTP / 1.1 400 Bad Request" fehl.
Ich stelle fest, dass das Aufrufen des gleichen Dienstes und das Weglassen des Parameters 'xml' funktioniert.
Ich habe folgendes ohne Erfolg versucht:
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;
Es funktioniert auch, dieselbe URL mit dem Parameternamen 'xml' aufzurufen, der in etwas anderes umbenannt wurde, z. B. 'xml2' oder 'name' mit demselben Wert wie oben. Ich habe auch mehrere Kombinationen des Zeichensatzes ausprobiert, aber ich denke, die Indy-Komponente ändert es intern.
BEARBEITEN
Der Service erwartet:
[WebGet(UriTemplate = "SendReports/{format=pdf}?report={reportFile}¶ms={jsonParams}&xml={xmlFile}&profile={profile}&id={id}")]
Hat jemand irgendwelche Erfahrungen damit?
Vielen Dank