- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下使用 Indy 组件从互联网下载文件的代码:
procedure TForm26.Button1Click(Sender: TObject);
var
vFileStream : TStream;
begin
DeleteFile('C:\test.exe');
vFileStream := TFileStream.Create('C:\test.exe', fmCreate);
IdHTTP1.Get('SomeUrl', vFileStream);
vFileStream.Free;
end;
我遇到内存不足异常。发生的事情除了我正在使用 TFileStream
的事实之外,写入其中的字节不会直接写入磁盘,而是保留在内存中,直到 get
终止。
我尝试下载的文件非常非常大。
有人知道如何下载大文件而不出现内存不足异常吗?
Delphi 2010 和来自 Indy SVN 的最新 Indy 10。
编辑
这不是 FileStream
问题。这是一个Indy
问题。 Indy 以某种方式在将文件写入流之前将其缓存在内存中。
最佳答案
TIdHTTP
如果数据是压缩的,或者数据是 HTML 并且 TIdHTTP.HTTPOptions
将整个文件下载到内存中属性不包含 hoNoParseMetaHTTPEquiv
标志。
Indy 尚不支持 HTTP 流式解压缩(但支持 FTP),因此 TIdHTTP
将整个压缩数据缓存在内存中,然后再将其解压缩到文件。
当 HTML 通过 HTML 用新值覆盖 HTTP header 值时,有时需要解析 HTML <meta>
标签,最重要的是数据的 Charset 值,所以 TIdHTTP
当数据作为 String
返回到用户代码时,可以使用正确的字符集解码数据。启用hoNoParseMetaHTTPEquiv
标志禁用该解析,从而禁用 HTML 数据的任何缓存(除非也使用压缩)。
关于delphi - TidHttp 文件下载引发内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10607276/
我正在使用 TIdHTTP组件,它是 GET功能。 GET函数发送一个完整的请求,这很好。 但是,我想从 GET 响应中节省/保存一些流量,并且只想接收位于 HTTP 响应的第一“行”中的 Respo
在我的Delphi 2007代码中,我将发布到安全的Web服务中以获取身份验证令牌。一切都适用于Postman或以.net语言发出的请求。 但是我需要使用Delphi 2007访问此WS ...然后我
我有一台具有几个不同静态IP的机器。是否可以通过TIdHTTP(Indy)为HTTP请求选择传出IP地址? 最佳答案 较新版本的Indy具有BoundIP。 idHttp1.BoundIP := '1
我正在编写一个程序来检查网站以测试它们的当前状态,例如200 好的。我使用 Delphi 2010 附带的 Indy HTTP 来完成此任务,并拥有当前代码。 procedure TCheckSite
考虑以下使用 Indy 组件从互联网下载文件的代码: procedure TForm26.Button1Click(Sender: TObject); var vFileStream : TStr
我在 delphi Tidhttp 组件中遇到一个问题,其中 GET 过程无法获取特定的 url,但在其他 url 上它正在工作。示例:此代码返回一个空的response.datastring。仅对于
在一个项目中,我使用 TIdHTTP 调用网络服务器。 网络服务器是一个 asp.net 测试应用程序,它返回以下 json: { "message":"test ÀÈÉÌÒÙàèéìòù" }
我的表单上有一个 TIdHTTP 组件,并且我正在向基于云的服务器发送 http POST 请求。一切都运行良好,除了 1 个字段:带有加号的文本字符串,例如“hello world+dog”被保存为
我尝试向网站发送获取请求。问题是,如果请求者是机器人,网站就会被识别 const _URL = 'https://www.URL.com/'; var sSessionID:String; P
我使用此代码下载小文件: Var ms:TMemoryStream; begin ms:=TMemoryStream.Create; Idhttp1.get('http://mydomain
我正在用 Delphi 编写一个下载管理器,具有一些自定义功能,例如可恢复下载和通过代理下载。 我正在研究不同的组件解决方案:Indy 和 NetHTTP,两者看起来都非常接近。 TNetHTTPCl
所以我使用 tidhttp 来发出 post 请求。当我尝试将 connectTimeout 设置为任意时间段时,它都没有效果。在出现异常之前我仍然等待约 5 秒。提前致谢! 最佳答案 如果您要连接到
我使用delphi和python实现了相同的代码(发布表单)。 python 代码工作正常,但 delphi 代码失败。在 python 中,我可以简单地编写 httplib2.debuglevel=
我在向 Amazon 的 SES 发帖时遇到问题使用 Indy 的 TIdHTTP 的服务。 这是我正在使用的代码示例: procedure TMainFrm.btnAmazonSESClick(Se
我尝试了很长一段时间在 delphi 中做一个“愤怒的 http 下载器”,但是 TIdHttpCli 就是不能做我想做的。由于某种原因,它不会在多个线程中同时运行。请看一下这个问题的简单演示: pr
我想使用 TIdHttp (Indy10) 实现一个简单的 http 下载器。我从网上找到了两种代码示例。不幸的是,他们中没有一个能让我 100% 满意。这是代码,我需要一些建议。 变体 1 var
我有一个通过 http 连接的小设备。我发送一些 xml,然后等待答案。 http:tidhttp; XMLData:TStringStream; http.Post(DeviceUrl,XMLDat
我曾经在 Delphi 6 天使用 Indy,现在正在玩 Indy 10。我想做的事情非常简单,但我没有看到一种简单的方法,所以我一定遗漏了一些东西。 我想做的是这样的: 这是我使用的实际代码: pr
我正在尝试调用托管在 IIS 上并应用了 Windows 身份验证安全性的 Web 服务。 我正在将 Delphi XE 与 INDY 10 和 TIdHttp 组件结合使用。 如果我传入有效的用户名
我使用 IdHTTP.Get 下载 URL,我需要搜索 HTML 标记并提取一些数据。 如何将 IdHTTP.Get 返回的字符串转换为 IHTMLDocument2? 最佳答案 试试这个: uses
我是一名优秀的程序员,十分优秀!