我想直接将一个网址加载到没有任何数据流的字符串中,最好的方式是什么,internet open url
有效,但似乎不太清楚。
我不想使用任何组件来阅读一些短信
答案 0 :(得分:6)
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;
视您的需要而定。
答案 1 :(得分:3)
您可以使用Synapse,这是一个非常轻量级的库,只需要一个简单的函数调用即可获得您的要求:
uses
classes, httpsend;
var
Response : TStringlist;
begin
if HttpGetText(URL,Response) then
DoSomethingWithResponse(Response.Text);
end;
我建议从SVN获取最新版本,这是最新版本并包含对最新版本Delphi的支持。还有用于发布表单数据或检索二进制资源的简单函数。这些是作为简单的函数实现的,如果你想做额外的事情,或者不直接支持,它们是一个很好的模板。
答案 2 :(得分:1)
您可以使用我们的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完成端口实现)。
答案 3 :(得分:0)
如果我已经在应用程序(和MSXML2_TLB)中使用XML,我通常使用IXmlHttpRequest来执行http操作。如果打开并发送请求,您可以使用ResponseXML将响应数据用作XML DOM,使用ResponseText作为文本使用,或者使用ResponseStream作为数据流,请参阅此处以获取如何在Delphi中使用它的示例:{{3 }}