5

次のコードでは、「HTTP/1.1 403 Forbidden」というメッセージを含む例外クラス EIdHTTPProtocolException を取得します。プロセス svchostip.exe (11172)

function GetInternetIP:string;
var
  IdHTTPMainUrl : TIdHTTP;
begin
  try
    IdHTTPMainUrl := TIdHTTP.Create(nil);
    IdHTTPMainUrl.Request.Host := 'http://www.whatismyip.com/automation/n09230945.asp';
    Result := idHTTPMainUrl.Get('http://automation.whatismyip.com/n09230945.asp');
  except
    IdHTTPMainUrl.Free;
  end;
end;
4

1 に答える 1

16

ユーザー エージェントを設定する必要があります。これは WhatIsMyIP faqに記載されています。

•プログラムのユーザー エージェントを Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0 に設定してください。これにより、プログラムが CloudFlare によってブロックされなくなります。

また、TIdHTTPインスタンスの解放は無条件である必要があります。例外がスローされたときにのみ解放します。例外を処理するには、例外処理を使用します。

function GetInternetIP:string;
var
  IdHTTPMainUrl : TIdHTTP;
begin
  IdHTTPMainUrl := TIdHTTP.Create(nil);
  try
    IdHTTPMainUrl.Request.UserAgent :=
      'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
    Result := idHTTPMainUrl.Get('http://automation.whatismyip.com/n09230945.asp');
  finally
    IdHTTPMainUrl.Free;
  end;
end;
于 2012-06-03T14:08:19.953 に答える