【问题标题】:Delphi Devart SecureBridge POST RequestDelphi Devart SecureBridge POST 请求
【发布时间】:2020-10-28 18:21:09
【问题描述】:

我正在使用 DevArt 的 SecureBridge 产品的试用版。我正在尝试处理 POST,但不知何故我无法打印请求数据。

XML:

<test>
<a>test1</a>
<b>test2</b>
</test>

德尔福:

  ScHttpWebRequest1.Method := rmPOST;
  ScHttpWebRequest1.ContentType := 'text/xml';
  ScHttpWebRequest1.RequestUri := 'https://test.com/api';
  ScHttpWebRequest1.KeepAlive := True;
  ScHttpWebRequest1.ContentLength := Length(XML);
  ScHttpWebRequest1.WriteBuffer(pAnsiChar(XML), 0, Length(XML)); ///I think I'm making a mistake here.
  ShowMessage(ScHttpWebRequest1.GetResponse.ReadAsString);

我已经查看了文档,但是有一个名为 RequestStream 的功能。我下载的版本没有这个功能。我认为使用 WriteBuffer 代替或不同。我想做的就是在相关站点上请求一个带有 XML 内容的 POST。我该怎么做?

谢谢。

【问题讨论】:

标签: delphi delphi-xe devart


【解决方案1】:

这是一段对我有用的代码:

var
 Response: TScHttpWebResponse;
 ResponseStr: string;
 buf: TBytes;
begin
  ScHttpWebRequest1.Method := rmPOST;
  ScHttpWebRequest1.ContentType := 'text/xml';
  ScHttpWebRequest1.RequestUri := 'https://test.com/api';
  ScHttpWebRequest1.KeepAlive := True;

   buf := TEncoding.UTF8.GetBytes(xml);
   ScHttpWebRequest1.ContentLength := Length(buf);
   ScHttpWebRequest1.WriteBuffer(buf);
   Response:=ScHttpWebRequest1.GetResponse;
   ResponseStr:=Response.ReadAsString;
end;

【讨论】:

    【解决方案2】:

    根据Devart forums 信息,您可以发布/放置流或字符串参数,如下所示:

    var
      Request: TScHttpWebRequest;
      Response: TScHttpWebResponse;
      ResponseStr: string;
      Stream: TFileStream;
    begin
      Request := TScHttpWebRequest.Create(URL);
      Stream := TFileStream.Create(FileName, fmOpenRead);
      try
        Request.Method := rmPut;
    
        Request.ContentType := 'application/pdf';
        Request.TransferEncoding := 'binary';
        Request.Headers.Add('Content-Disposition', 'form-data; name="FormFile"; filename="Document1.pdf"');
    
        Request.ContentLength := Stream.Size;
        Request.SendChunked := True;
        Request.RequestStream := Stream;
    
        Response := Request.GetResponse;
        ResponseStr := Response.ReadAsString;
        Response.Free;
      finally
        Stream.Free;
        Request.Free;
      end;
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2013-10-25
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 2014-07-24
      相关资源
      最近更新 更多