我正在尝试使用DelphiXE编译程序和IdHTTP组件访问我网站上的update.txt文件。

我使用的代码如下:

procedure TFormAbout.SpeedButtonUpdateClick(Sender: TObject);

function CheckUpdates: String;
var lIdHttp: TIdHTTP;
begin
  lIdHttp := TIdHTTP.Create(nil);
  result := lIdHttp.Get('http://www.test.com/test_down_load/update.txt');
end;

var
sWebVersion: String;
sVersionList: TStringList;

begin
try
  sWebVersion := Checkupdates;
except
  on E: Exception do
  begin
    ShowMEssage(E.ErrorMessage);
    MessageDlg('An Error occured checking for an update.',mtError,[mbOK],0);
  end;
end;
if sWebVersion <> '' then
  begin
    sVersionList.CommaText := sWebVersion;
    ShowMessage('Version: ' + sVersionList[0] + ' - ' + 'Date: ' + sVersionList[1]);
  end;
end;

但是,这将导致错误:HTTP1.1/403 Forbidden

使用以下属性设置了IdHTTP组件。
HandleRedirects := true;
HTTPOptions [hoForceEncodeParams];
ProtocolVersion := pv1_1;
Request.UserAgent := Mozilla/5.0 (compatible; Test)

如果我在IE浏览器中输入URL,它将返回没有错误的文件,但是从我的程序访问时,我得到了错误。
任何指针将不胜感激。
.htaccess对于该站点是正确的。
该文件的权限在网站上正确无误:0644。

我是否必须为IdHTTP组件设置其他任何属性。我在about表单上只有这个组件。我还需要其他东西吗?

updateinfo.txt文件仅包含引号中的文本:
“18.3.5,2011/12/17”

在这里,我只是使用“测试”代替了我的实际程序名称和URL。

问候
阿德里安

最佳答案

403表示您无权访问所请求的URL。服务器可能要求您提供用户名/密码,尤其是由于您使用的是.htaccess文件。为此使用Request.UserNameRequest.Password属性。至于为什么浏览器不要求用户名/密码,我猜是浏览器已经从较早的访问中缓存了它们。

顺便说一句,您的SpeedButtonUpdateClick()发生内存泄漏。您正在创建一个新的TIdHTTP对象,但没有释放它。

关于delphi - IdHTTP.get返回HTTP1.1/403禁止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8546370/

10-12 22:30