首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Delphi调用Http GET url的最简单方法是什么?

使用Delphi调用Http GET url的最简单方法是什么?
EN

Stack Overflow用户
提问于 2008-11-19 10:52:34
回答 8查看 95.8K关注 0票数 45

我想在我的应用程序中调用一个web服务,我可以在导入WSDL时使用它,或者在URL和参数中使用"HTTP“,所以我更喜欢后者,因为它很简单。

我知道我可以使用indy idhttp.get来完成这项工作,但是这是非常简单的事情,我不想在我的应用程序中添加复杂的indy代码。

UPDATE:对不起,如果我不清楚的话,我的意思是“不添加复杂的indy代码”,我不希望只为这个简单的任务添加indy组件,而更倾向于使用更轻松的方式。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-11-19 11:27:46

您可以像这样使用WinINet API

代码语言:javascript
运行
复制
uses WinInet;

function GetUrlContent(const Url: string): string;
var
  NetHandle: HINTERNET;
  UrlHandle: HINTERNET;
  Buffer: array[0..1024] of Char;
  BytesRead: dWord;
begin
  Result := '';
  NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

  if Assigned(NetHandle) then 
  begin
    UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);

    if Assigned(UrlHandle) then
      { UrlHandle valid? Proceed with download }
    begin
      FillChar(Buffer, SizeOf(Buffer), 0);
      repeat
        Result := Result + Buffer;
        FillChar(Buffer, SizeOf(Buffer), 0);
        InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
      until BytesRead = 0;
      InternetCloseHandle(UrlHandle);
    end
    else
      { UrlHandle is not valid. Raise an exception. }
      raise Exception.CreateFmt('Cannot open URL %s', [Url]);

    InternetCloseHandle(NetHandle);
  end
  else
    { NetHandle is not valid. Raise an exception }
    raise Exception.Create('Unable to initialize Wininet');
end;

来源:http://www.scalabium.com/faq/dct0080.htm

WinINet API使用InternetExplorer使用的相同内容,因此您也可以免费获得InternetExplorer设置的任何连接和代理设置。

票数 29
EN

Stack Overflow用户

发布于 2008-11-19 11:13:15

使用Indy调用RESTful web服务是非常直接的。

将IdHTTP添加到uses子句中。请记住,IdHTTP需要URL上的"HTTP://“前缀。

代码语言:javascript
运行
复制
function GetURLAsString(const aURL: string): string;
var
  lHTTP: TIdHTTP;
begin
  lHTTP := TIdHTTP.Create;
  try
    Result := lHTTP.Get(aURL);
  finally
    lHTTP.Free;
  end;
end;
票数 35
EN

Stack Overflow用户

发布于 2011-10-13 20:17:29

实际上,接受答案中的代码对我不起作用。所以我对它做了一些修改,这样它实际上返回了字符串,并在执行后优雅地关闭了所有内容。示例以UTF8String的形式返回检索到的数据,因此它在ASCII和UTF8页面上都能很好地工作。

代码语言:javascript
运行
复制
uses WinInet;

function GetUrlContent(const Url: string): UTF8String;
var
  NetHandle: HINTERNET;
  UrlHandle: HINTERNET;
  Buffer: array[0..1023] of byte;
  BytesRead: dWord;
  StrBuffer: UTF8String;
begin
  Result := '';
  NetHandle := InternetOpen('Delphi 2009', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(NetHandle) then
    try
      UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
      if Assigned(UrlHandle) then
        try
          repeat
            InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
            SetString(StrBuffer, PAnsiChar(@Buffer[0]), BytesRead);
            Result := Result + StrBuffer;
          until BytesRead = 0;
        finally
          InternetCloseHandle(UrlHandle);
        end
      else
        raise Exception.CreateFmt('Cannot open URL %s', [Url]);
    finally
      InternetCloseHandle(NetHandle);
    end
  else
    raise Exception.Create('Unable to initialize Wininet');
end;

希望它能帮助像我这样的人寻找简单的代码,如何在Delphi中检索页面内容。干杯,阿尔迪斯:)

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/301546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档