我正在尝试使用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.UserName
和Request.Password
属性。至于为什么浏览器不要求用户名/密码,我猜是浏览器已经从较早的访问中缓存了它们。
顺便说一句,您的SpeedButtonUpdateClick()
发生内存泄漏。您正在创建一个新的TIdHTTP
对象,但没有释放它。
关于delphi - IdHTTP.get返回HTTP1.1/403禁止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8546370/