我正在使用我在这里找到的代码从www.imdb.com获得电影标题,而且它工作得很好,但是由于imdb有某种地理位置,我需要弄清楚如何用"Accept-Language: en“头来强制英语的结果,但我不确定是否可以使用这段代码。有可能吗?
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;发布于 2014-03-01 00:49:33
InternetOpenUrl()的第三个参数允许您指定自定义标头,例如:
UrlHandle := InternetOpenUrl(hInter, PChar(Url), 'Accept-Language: en', -1, INTERNET_FLAG_RELOAD,0);顺便说一句,不能保证InternetReadFile()会在一个缓冲区中返回所有内容。您应该在循环中调用它,将每个缓冲区附加到本地缓存,直到缓存了所需的所有内容,然后根据需要处理缓存。
更新:IMDB确实使用IP地理定位,因此显然它不像以前那样使用Accept-Language。您必须根据以下情况调整HTTP请求:
为什么我看到的标题与以前不同的语言?
我们最近修改了标题在网站上的显示方式。在默认情况下,用户现在将看到在本国发行的语言中列出的标题(即美国用户将看到在北美发行的标题下列出的电影,而浏览法国网站的用户将看到这些电影在法国发行时出现的标题等)。如果您在IMDb.com上注册,并且希望看到原始标题,或者默认情况下在任何其他语言/发行国中看到标题,您可以相应地设置您的用户首选项。 为此,请单击“您的帐户”链接(位于IMDb.com上每个页面的右上角),然后单击“站点首选项”选项,或直接转到https://secure.imdb.com/register-imdb/siteprefs,然后从“标题显示国家”和“标题显示语言”下拉菜单中选择所需的选项。单击“确定”以保存您的选择。 有关更多帮助/信息,请参考我们的网站首选项帮助页面。 请记住,如果您通过以下URL访问该网站,则无论您的登录状态或网站首选项如何,您都会看到在其原始标题下列出的影片: http://akas.imdb.com
https://stackoverflow.com/questions/22105013
复制相似问题