【问题标题】:delphi 7 http request into stringdelphi 7 http请求转换成字符串
【发布时间】:2010-11-03 22:24:36
【问题描述】:

我想在没有任何数据流的情况下将 url 直接加载到字符串中,最好的方法是什么,internet open url 有效,但似乎不清楚。

我不想使用任何组件来阅读一些短信

【问题讨论】:

  • 你的意思是加载一个url
  • 打开一个网址,例如:'test.com/postaccepter?=msg1=3444&msg2=test'
  • open 听起来像是浏览器操作,而不是 http 操作。您应该定义是否要通过特定 URL 进行 GET 或 POST。抱歉,我不清楚您要完成什么。 没有任何数据流你的意思是你想丢弃服务器响应文本还是你不想实例化任何 TStream 来检索它?

标签: delphi http delphi-7


【解决方案1】:

Delphi 6 及更高版本随 Indy 一起提供,它有一个 TIdHTTP 客户端组件,例如:

uses
  ..., IdHTTP;

var
  Reply: String;
begin
  Reply := IdHTTP1.Get('http://test.com/postaccepter?=msg1=3444&msg2=test');
    ...
end;

或者:

uses
  ..., IdHTTP;

var
  Reply: TStream;
begin
  Reply := TMemoryStream.Create;
  try
    IdHTTP1.Get('http://test.com/postaccepter?=msg1=3444&msg2=test', Reply);
    Reply.Position := 0;
    ...
  finally
    Reply.Free;
  end;
end;

根据您的需要。

【讨论】:

    【解决方案2】:

    您可以使用Synapse,这是一个非常轻量级的库,它有一个简单的函数调用来满足您的要求:

    uses
      classes, httpsend;
    
    var
      Response : TStringlist;
    
    begin
      if HttpGetText(URL,Response) then
        DoSomethingWithResponse(Response.Text);
    end;
    

    我建议从SVN 获取最新副本,它更新并包含对最新版本的 Delphi 的支持。还有一些用于发布表单数据或检索二进制资源的简单函数。这些是作为简单函数实现的,如果您想做一些额外的事情,或者不直接支持,它们是一个很好的模板。

    【讨论】:

    • 我猜你的意思是 TStringlist 而不是 Ttringlist? :)
    • @Simon,谢谢......所以在将代码输入 SO 时需要完成代码。 :D
    【解决方案3】:

    您可以使用我们的 SynCrtSock 单元,它比 Synapse 更轻。

    http://synopse.info/fossil/finfo?name=SynCrtSock.pas

    它是一个独立的单元(仅与 WinSock 单元有一个依赖项),它适用于从 Delphi 6 到 Delphi XE。

    您可以使用以下两个函数在一行代码中获取数据:

    /// retrieve the content of a web page, using the HTTP/1.1 protocol and GET method
    function HttpGet(const server, port: AnsiString; const url: TSockData): TSockData;
    
    /// send some data to a remote web server, using the HTTP/1.1 protocol and POST method
    function HttpPost(const server, port: AnsiString; const url, Data, DataType: TSockData): boolean;
    

    或者您可以使用基于文本文件的命令(如 readln 或 writeln)来接收或保存数据。

    TSockData 只是 RawByteString(在 Delphi 2009/2010/XE 下)或 AnsiString(直到 Delphi 2007)的包装器。

    如果您还需要编写服务器,则手头有专用类,从而实现快速处理和低资源消耗(它使用线程池,并通过 I/O 完成端口实现)。

    【讨论】:

      【解决方案4】:

      如果我已经在应用程序中使用 XML(和 MSXML2_TLB),我通常使用 IXmlHttpRequest 来执行 http 操作。如果您打开并发送请求,您可以使用 ResponseXML 将响应数据用作 XML DOM、使用 ResponseText 作为文本或使用 ResponseStream 作为数据流,请参阅此处了解如何在 Delphi 中使用它的示例:http://yoy.be/item.asp?i142

      【讨论】:

      • 我不想使用任何组件或单元 Andreas Rejbrand 评论对我有好处,但似乎不起作用
      • msxml*.dll 几乎肯定存在于所有 Windows 机器上,如果您愿意,可以只复制粘贴 MSXML2_TLB 所需的部分以避免包含该单元。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多