使用InternetOpenURL的一些奇怪问题

tttk 2004-08-16 09:41:41
1、首先是使用Flags时的疑惑:

INTERNET_FLAG_HYPERLINK
INTERNET_FLAG_NEED_FILE
INTERNET_FLAG_NO_CACHE_WRITE
INTERNET_FLAG_PRAGMA_NOCACHE
INTERNET_FLAG_RELOAD
INTERNET_FLAG_RESYNCHRONIZE

如果我只想从Cache读取,我该使用什么标志?

如果我不想从Cache读取,我是使用INTERNET_FLAG_RELOAD还是INTERNET_FLAG_PRAGMA_NOCACHE?还是同时使用?那么INTERNET_FLAG_NO_CACHE_WRITE是否应该加上呢?

还有INTERNET_FLAG_HYPERLINK、INTERNET_FLAG_RESYNCHRONIZE 在决定自动更新时应该使用哪一个?INTERNET_FLAG_NEED_FILE起到什么作用?

2、我在程序中使用多线程,有的线程下载网页只从Cache读取,有的需要每次读取更新网页。在使用时,刚运行时工作正常,可是运行了一段时间之后,发现后者读到的总是Cache中的内容,即无法自动更新。这到底是怎么回事?我也使用了像 INTERNET_FLAG_RELOAD 这样的标志,为什么好像不管用了呢?难道是多个线程之间相互干扰?

不知大家有无这方面的经验,麻烦指点一二。
...全文
559 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tttk 2004-08-19
  • 打赏
  • 举报
回复
奇怪,这个问题没有人会吗?或者给我讲讲原理——为什么修改了浏览器的设置然后就可以了呢?
tttk 2004-08-18
  • 打赏
  • 举报
回复
在线等待
cronuz 2004-08-17
  • 打赏
  • 举报
回复
{ I've written a small app that modifies a setting for IE and
need to somehow tell IE to re-read the registry settings.
Does anyone know of an API call or message that will do this? }

uses
WinInet;

procedure IE_Reread_Registry_Settings;
var
HInet: HINTERNET;
begin
hInet := InternetOpen(PChar('YourAppName'), INTERNET_OPEN_TYPE_DIRECT,
nil, nil, INTERNET_FLAG_OFFLINE);
try
if hInet <> nil then
InternetSetOption(hInet, INTERNET_OPTION_SETTINGS_CHANGED, nil, 0);
finally
InternetCloseHandle(hInet);
end;
end;

(注:給出一個「InternetSetOption」的例、強制増加「additional cache flags」
   若要「INTERNET_FLAG_NO_CACHE_WRITE」、要用到「InternetSetOption」
   我没用過、NI自己試試看...)
tttk 2004-08-17
  • 打赏
  • 举报
回复
cronuz(cronus),我使用了INTERNET_FLAG_RAW_DATA,对于类似 http://url/ 性质的网址不再cache,但是对于类型 http://url/page.html 类型的网页依然cache。

其实是否cache倒并不是我真正关心的问题,我只想实现每次读取网页都是最新数据。
cronuz 2004-08-17
  • 打赏
  • 举报
回复
在「InternetOpen」用「INTERNET_OPEN_TYPE_DIRECT」
同時「InternetOpenUrl」用「INTERNET_FLAG_RAW_DATA」

也不行嗎?
tttk 2004-08-17
  • 打赏
  • 举报
回复
cronuz(cronus),感谢您的答复。

我现在依然疑惑的就是 如何才能不让 网页缓存到cache中,我尝试了所有的flags,似乎依然没有办法,网页依然被cache,而且第二次读取就从cahce读,我没有办法读到最新的数据。
cronuz 2004-08-17
  • 打赏
  • 举报
回复
一般的在使用InternetOpenURL前、先要用InternetOpen

procedure TForm1.Button1Click(Sender: TObject);
var
hNet,hServer: HINTERNET;
strURL: String;
begin
strURL := 'http://www.yahoo.net';

{ Open an internet session }
hNet := InternetOpen('Project1', // Agent
INTERNET_OPEN_TYPE_PRECONFIG, // ①AccessType
nil, // ProxyName
nil, // ProxyBypass
0); // or INTERNET_FLAG_ASYNC / INTERNET_FLAG_OFFLINE
{Agent contains the name of the application or entity calling the
Internet functions}

{ See if connection handle is valid }
if hNet = nil then
begin
ShowMessage('Unable to get access to WinInet.Dll');
Exit;
end;

{ Connect to the Http Server }
hServer := InternetOpenURL(hNet, // Handle from InternetOpen
PChar(strURL), // Http server
nil, //header
0, //headers Length
INTERNET_FLAG_RAW_DATA,// ②flag
0); // User defined number for callback
if hServer = nil then
begin
InternetCloseHandle(hNet);
ShowMessage(Format('Host "%s" is not available',[strURL]));
Exit;
end
else begin
ShowMessage(Format('Host "%s" is OK',[strURL]));
end;
{...}
end;

対上述的説明:
①AccessType
{ access types for InternetOpen }
const
INTERNET_OPEN_TYPE_PRECONFIG = 0; { use registry configuration }
{$EXTERNALSYM INTERNET_OPEN_TYPE_PRECONFIG}
INTERNET_OPEN_TYPE_DIRECT = 1; { direct to net }
{$EXTERNALSYM INTERNET_OPEN_TYPE_DIRECT}
INTERNET_OPEN_TYPE_PROXY = 3; { via named proxy }
{$EXTERNALSYM INTERNET_OPEN_TYPE_PROXY}
INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4; { prevent using java/script/INS }
{$EXTERNALSYM INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY}

②flag
{ flags for InternetOpenUrl: }
INTERNET_FLAG_RAW_DATA = $40000000; { receive the item as raw data }
{$EXTERNALSYM INTERNET_FLAG_RAW_DATA}
INTERNET_FLAG_EXISTING_CONNECT = $20000000; { do not create new connection object }
{$EXTERNALSYM INTERNET_FLAG_EXISTING_CONNECT}
tttk 2004-08-17
  • 打赏
  • 举报
回复
谢谢你。在InternetSetOption选项中,我没有找到设置CACHE读写的选项。奇怪的是,我设置了浏览器的“检查网页版本”为“每次检查”后,情况变得正常。

是否可以从中得到启示?希望大家继续讨论。
tttk 2004-08-16
  • 打赏
  • 举报
回复
为什么我使用了 INTERNET_FLAG_NO_CACHE_WRITE 标志依然还是被Cache了呢?

另外,如果我清除了Cache中的内容,程序就会工作正常,一段时间以后又只从Cache读取了,好奇怪

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧