2012-06-03 53 views
5

通过以下代码,我得到异常类EIdHTTPProtocolException,并显示'HTTP/1.1 403 Forbidden'消息。流程svchostip.exe(11172)当我连接到whatismyip.com时,为什么会收到“403 Forbidden”?

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; 
+2

这有点幸运,否则TIdHTTP会泄漏。 –

+2

您正在将'Host'属性设置为显然不是主机名的东西。它不应该是一个完整的URL。您正在连接* automation.whatismyip.com *,因此也将其用于'Host'属性。 –

+2

你甚至都不应该根本分配'Request.Host'。 'TIdHTTP'在内部管理这个值。 –

回答

14

您需要设置您的用户代理,这是记录在WhatIsMyIP faq

•请设置您的程序的用户代理的Mozilla/5.0(Windows NT的6.1 ; WOW64; RV:12.0)的Gecko/20100101火狐/ 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; 
+0

谢谢。有用! –

+0

@Sergei - 不客气! –

+0

解决之后,我得到了同样的问题新的错误是503服务暂时不可见...如何fixx? – Hidden

相关问题