我使用的代碼,我在這裏找到從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