【问题标题】:Getting XML from response stream using Indy's IDTCPClient [closed]使用 Indy 的 IDTCPClient 从响应流中获取 XML [关闭]
【发布时间】:2013-12-02 11:08:25
【问题描述】:

这个问题直接关系到:

Getting HTML from response stream using Indy's IDTCPClient

我只需要一个版本的 get 函数来检索 XML

function TMyConnector.GETXML(aRawHeader: String): String;

使用 idHTTP 组件,我可以执行以下操作

HTTP.Request.ContentType := 'text/xml';

我要的文件头是这样的:

<?xml version="1.0" encoding="utf-8" ?>

如何使用 IDTCPClient 组件执行此操作?

【问题讨论】:

    标签: xml delphi indy delphi-xe5


    【解决方案1】:

    TIdHTTP.Request.ContentType 要求服务器发送 XML 与 HTML。它告诉服务器 正在向服务器发送 XML/HTML 。很不一样的东西。

    要求服务器向您发送 XML/HTML,这实际上取决于服务器,而不是客户端。您有几个选择,具体取决于服务器的要求:

    1. 请求仅发送 XML 的特定 URL。请求仅发送 HTML 的特定 URL。等等。

    2. 请求一个调用服务器端脚本的 URL,该脚本允许您通常(但不总是)在 URL 中传递输入参数,以指定所需的输出格式。

    3. 在请求中包含Accept 标头,指定您愿意为给定 URL 接收的特定格式。服务器必须能够以多种格式表示请求的数据。

    您对 HTTP 和 TIdHTTP 的实际工作方式存在根本性的误解。我强烈建议您使用 Wireshark 和 Fiddler 来研究真正的 Web 浏览器如何发送 HTTP 请求,然后学习如何在代码中复制它。还要研究 RFC 2616。手动正确实施 HTTP 并非易事,因此拒绝使用预制的 HTTP 库,你打开了一个更大的蠕虫罐,然后你可能已经准备好了。

    【讨论】:

    • @LIVESTUFF:Fiddler 是一个代理服务器。它可以自动重定向基于 WinInet 的应用程序(如 Internet Explorer)以连接到自身,但其他应用程序(如您的应用程序)需要手动配置才能连接到代理。 TIdHTTP 具有用于此目的的 ProxyParams 属性。
    【解决方案2】:

    hmmmm,事实证明这比想象的要容易。我只是查看了 GenerateJSON 方法并说好的,我如何将这个方法用于 XML。

    然后我用谷歌搜索 MempryStream 到 String 并找到了这个函数

    function StreamToString(aStream: TStream): string;
    var
      SS: TStringStream;
    begin
      if aStream <> nil then
      begin
        SS := TStringStream.Create('');
        try
          SS.CopyFrom(aStream, 0);  // No need to position at 0 nor provide size
          Result := SS.DataString;
        finally
          SS.Free;
        end;
      end else
      begin
        Result := '';
      end;
    end;
    
    
    
    Procedure TLtLiveConnector.GenerateXML;
    begin
    if ResponseStream <> nil then
      Begin
       ResponseXML_V := StreamToString(ResponseStream);
      End;
    end;
    

    【讨论】:

      猜你喜欢
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      相关资源
      最近更新 更多