我使用的代码,我在这里找到从www.imdb.com获得电影标题,它工作正常,但由于imdb有某种地理位置我需要计算如何强制英文结果与一个“Accept-Language:en”标题,但我不确定是否可以使用此代码。可能吗?InternetOpenUrl和IMDB头
uses
WinInet,
StrUtils,
SysUtils;
function GetHTMLTitle(const Url:string):string;
const
BuffSize = 64*1024;
TitleTagBegin='<title>';
TitleTagEnd ='</title>';
var
hInter : HINTERNET;
UrlHandle: HINTERNET;
BytesRead: Cardinal;
Buffer : Pointer;
i,f : Integer;
begin
Result:='';
hInter := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(hInter) then
begin
GetMem(Buffer,BuffSize);
try
UrlHandle := InternetOpenUrl(hInter, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD,0);
try
if Assigned(UrlHandle) then
begin
InternetReadFile(UrlHandle, Buffer, BuffSize, BytesRead);
if BytesRead>0 then
begin
SetString(Result, PAnsiChar(Buffer), BytesRead);
i:=Pos(TitleTagBegin,Result);
if i>0 then
begin
f:=PosEx(TitleTagEnd,Result,i+Length(TitleTagBegin));
Result:=Copy(Result,i+Length(TitleTagBegin),f-i-Length(TitleTagBegin));
end;
end;
end;
finally
InternetCloseHandle(UrlHandle);
end;
finally
FreeMem(Buffer);
end;
InternetCloseHandle(hInter);
end
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Title : string;
begin
Title := GetHTMLTitle('http://www.imdb.com/title/tt1490017/');
Label1.Caption := Copy(Title, 1, LastDelimiter(')', Title));
end;
嗯, - 1作为标题长度给我错误“常量表达式违反子范围边界”即使您的建议似乎是正确的根据http://msdn.microsoft.com/en-us/library/windows/desktop/aa385098%28v=vs.85% 29.aspx – Deathglider1
'DWORD'类型的值不能是负数,因此它不能是-1。尽管该文档提到了“-1L”,它的值是-1,所谓的长后缀。我相信它可以在Delphi中翻译为'DWORD(LongInt(-1))'。 – TLama
我尝试过使用indy的TidHttp组件,它似乎并不像imdb.com那样关心我是否发送Accept-language:en作为标头。仍以本地语言获得标题.. IP地理定位? – Deathglider1