- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Delphi 中使用 WinInet.h 通过 HTTP 下载文件,平均大小在 30 KB 到 1.5 MB 之间。
var
Buf: array[0..BUFFER_SIZE - 1] of Byte;
while BOOL(InternetReadFile(hUrl, @Buf, SizeOf(Buf), BytesRead)) and (BytesRead > 0) do
if Terminated then
Exit
else
begin
FStream.WriteBuffer(Buf, BytesRead);
Synchronize(UpdateProgress);
FillChar(Buf, SizeOf(Buf), 0);
end;
此类下载的建议缓冲区大小是多少 - 既不能太大也不能太小。
最佳答案
对于这样的缓冲区,我通常编码:
var
Buf: array[word] of byte;
分配 64 KB 的缓冲区。
但是,从我的小实验来看,WinINet 太慢了,内部缓冲区大小不会发生太大变化。
如果您追求性能,请查看WinHTTP,它比WinINet快得多。速度快了 10 倍以上,至少对于多个连接而言。唯一缺少的功能是用于远程拨号访问的对话框:
Microsoft Windows HTTP Services (WinHTTP) provides developers with a server-supported, high-level interface to the HTTP/1.1 Internet protocol. WinHTTP is designed to be used primarily in server-based scenarios by server applications that communicate with HTTP servers.
WinINet was designed as an HTTP client platform for interactive desktop applications, such as Microsoft Internet Explorer, Microsoft Office, and Microsoft Money. WinINet displays a user interface for some operations such as collecting user credentials. WinHTTP, however, handles these operations programmatically. Server applications that require HTTP client services should use WinHTTP instead of WinINet. For more information, see Porting WinINet Applications to WinHTTP.
WinHTTP is also designed for use in system services and HTTP-based client applications. However, single-user applications that require FTP protocol functionality, cookie persistence, caching, automatic credential dialog handling, Internet Explorer compatibility, or downlevel platform support should consider using WinINet.
Extracted from MSDN
我在我们的开源 ORM 框架中实现了 WinInet 和 WinHTTP 客户端访问。您可以看看这篇博客文章来了解一下more info about WinHTTP .
据我所知,最新版本的IE使用WinHTTP而不是WinINet。所以我们可以考虑朝同一个方向发展。
关于delphi - InternetReadFile 的常见平均缓冲区大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565567/
为了获取 html 页面,我已经使用以下内容一段时间了,没有任何问题。现在,只要网站花费很长时间(1 分钟以上)来提供页面,我就会收到 I/O 1784 错误。我猜真正的错误是我的进程超时了。我该如何
我在 Delphi 中使用 WinInet.h 通过 HTTP 下载文件,平均大小在 30 KB 到 1.5 MB 之间。 var Buf: array[0..BUFFER_SIZE - 1] o
我需要有关从网页获取第一行的帮助,找到了一个与 ipchicken.com 一起使用的小脚本。但我不能用我的网络脚本运行它,发布原始代码因为我对所有事情都很生气......为此!我在这里搜索,但没有找
我有以下代码从服务器下载一些 rss 文件,但到目前为止我得到的 rss 文件的版本不完整。(?)代码如下 - #include #include #include #include #include
我有一个发送分块传输编码数据的服务器。我使用 InternetReadFile 读取数据,但 InternetReadFile 在读取第一个 block 后失败并返回 12004。我使用 fiddle
HINTERNET hInternet, hFtpSession, hFile; hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIREC
我是这里网站的新人,所以如果我在这篇文章中做错了什么,请原谅我。 我正在使用 WinINet 并尝试从 Internet 下载一个 binary file 但是,由于某种原因,当我到达实际下载该文件时
我正在尝试使用 C++ 中的 WinHTTP 获取文件的内容。该文件是一个 XML 文件,由服务器上的可执行文件生成。 用于初始化、连接甚至读取指定服务器地址上的文件的代码正在运行。 // Conne
在为 Windows Compact 2013 编写的 C++ 应用程序中尝试从 Internet 下载文件时,我遇到了一个非常奇怪的问题。 BOOL WWW::Read(char* buffer,
我正在尝试使用 WinINet 库调用从 http 服务器下载文件。它在我的本地网络服务器上工作得很好。但是当我试图从互联网上下载一些东西时,InternetReadFile 只读取 ~10kb 的任
我想将使用InternetReadFile下载的utf-8编码的网页源代码转换为windows可以识别的utf-16。 这里是代码片段: HINTERNET hConnect,hSession; ch
我可以下载文本文档(.html、.txt 等),但无法下载图像或 exe。我很确定这是因为我使用的是 char,而这些文件是二进制的。我知道在 C# 中我会使用一个字节。但是在这种情况下我会使用什么数
我的应用程序需要通过检索文本内容来处理 URL 列表。我的互联网连接是由启动的 myTimeOut:= 2000; InternetSetOption(nil, INTERNET_OPTION_CON
我正在编写一个跨平台应用程序。我需要从长轮询网址获取数据。 在 Mac/Linux 上我可以使用curl,curl_easy_perform()会自动处理所有事情。 在 Windows 上我必须使用
我在使用 InternetReadFile 时遇到问题,如果我在没有代理的计算机上运行该应用程序,该应用程序运行正常,但如果我尝试在使用代理的计算机上使用,我会收到错误 87(参数不正确) . 那是我
我对 WinInet 的 InternetReadFile (C++) 有疑问。 在极少数情况下,该函数失败并且 GetLastError 返回提到的错误 0x8007007a(根据 ErrorLoo
我在使用以下代码时遇到了一些问题。我见过大量使用 InternetReadFile 保存到文件的示例。但是我找不到一个,或者让它为 char[] 工作。我想把szBuffer加起来得到holdBuff
我正在尝试使用 WinInet API 简单地访问一个页面。访问它后,我希望能够将内容读入字符串。我已经初始化了根节点。这是我到目前为止得到的: HINTERNET hChildURL = Inter
我是一名优秀的程序员,十分优秀!