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}&params={jsonParams}&xml={xmlFile}&profile={profile}&id={id}")]

Hat jemand irgendwelche Erfahrungen damit?

Vielen Dank

Antworten auf die Frage(1)

Ihre Antwort auf die Frage