- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想通过文件流从 HTTP 服务器下载文件,并且只读取(并保存到文件)前几行,例如 100 行。读取前 100 行后,文件流必须结束:所以我这样做不想下载或阅读整个文件。
您可以在下面找到我到目前为止所拥有的内容。该网站只是一个例子。有人可以引导我走向正确的方向吗?
const
myURL = https://graphical.weather.gov/xml/DWMLgen/schema/latest_DWML.txt
var
fs: TMemoryStream;
http: TIdHTTP;
begin
fs := TMemoryStream.Create;
http := TIdHTTP.Create(nil);
try
fs.Position := 0;
http.Get(myURL, fs);
fs.SaveToFile('test.xml');
finally
fs.Free;
http.free
end;
end;
最佳答案
如果 HTTP 服务器支持所需 URL 的字节范围(通过 Range
请求 header ),您可以仅请求所需的特定字节,这就是服务器将发送的全部内容。您可以在调用 TIdHTTP.Get()
时使用 TIdHTTP.Request.Range
属性。要了解服务器是否支持字节范围,请首先使用 TIdHTTP.Head()
获取 URL header ,然后检查是否有 Accept-Ranges: bytes
存在 header (请参阅 TIdHTTP.Response.AcceptRanges
属性)。
如果服务器不支持字节范围,您将不得不继续使用当前的代码,只需对其进行一些更改:
不要调用 fs.SaveToFile()
,而是创建一个单独的 TFileStream
对象并将 TMemoryStream
传递到其 CopyFrom()
方法,这样您就可以准确指定要保存多少字节。
使用 TIdHTTP.OnWork
事件,或使用 TIdEventStream
,或派生覆盖 Write 的自定义
,为了跟踪正在下载的字节数,以便您可以中止下载(通过引发异常,例如通过 TStream
()SysUtils.Abort() 引发
)一旦收到所需的字节数。EAbort
)
当然,这两种方法都是面向字节而不是面向行。如果您需要面向行,特别是如果行的长度可变,那么您将必须使用上面的第二种方法,使用 TIdEventStream
或自定义 TStream
,因此您可以实现行解析逻辑并仅将完整行保存到文件中,然后在收到所需行数后中止。
关于delphi - 通过IdHTTP读取并保存部分文件流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43939318/
我正在准备申请。 IDHTTP:使用Get方法。但是有一些问题。我要创建一个代理列表,然后单击添加IDHTTP的列表框项(代理地址)。对不起,我不太会英语。 我的密码; procedure TForm
我正在尝试使用 Indy HTTP 类进行 HTTP 身份验证。但由于某种未知的原因,我在这一行中收到了访问冲突错误:IdHTTP1.Request.Authentication.Username :
我正在使用 idhttp (Indy) 进行一些网站检查。我想要它做的就是在发送请求后检查服务器的响应代码,我不想实际上必须从服务器接收 HTML 输出,因为我只监视 200 OK 代码,任何其他代码
请向我解释如何使用 SSL (https://) 从服务器下载文件。我在互联网上没有找到合适的答案。 每个人都在谈论 TIdSSLIOHandlerSocket,但我只有 TIdSSLIOHandle
请向我解释如何使用 SSL (https://) 从服务器下载文件。我在互联网上没有找到合适的答案。 每个人都在谈论 TIdSSLIOHandlerSocket,但我只有 TIdSSLIOHandle
我如何使用 IdHTTP 将消息作为 PostMan 发送如下: 我的第一次尝试如下: function TIdFoo.SendIM(const AID, AMessage: string): Boo
印地 10: 两个线程,线程 1 正在调用 TIdHTTP 上的 Get 并阻止读取数据。线程2将在同一个TIdHTTP上调用disconnect以中断Get。 我在 TIdHTTP 上使用摘要式身份
使用:Delphi 2010,最新版本的 Indy 我正在尝试从 Google Adsense 网页上抓取数据,目的是获取报告。然而到目前为止我还没有成功。它在第一个请求后停止并且不再继续。 使用 F
我使用 TIdHttp 来获取网页内容。响应头指示内容编码为utf8。我想在控制台中打印内容为CP936(简体中文),但实际内容不可读。 Result := TEncoding.Utf8.GetStr
一家公司要求我记录我们的客户端仅在软件级别通过 TCP 协议(protocol)与我们的服务器进行通信。我一直假设 IdHTTP 使用 TCP,但我不确定如何证明它。我在文档中找不到它。 最佳答案 T
我已指定 OnStatus 处理程序使用 AStatusText 参数更新标签。 在处理程序中设置断点时,它只会在我执行 Get("google.com") 时在 hsConnected 状态下中断。
像这样使用 TIdHttp 时: Memo1.Text := IdHTTP1.post(url,data); 如果 memo1 没有给出 http 错误,我可以获得响应内容。但是当它给出 http 错
好的,我已经动态创建了 Idhttp,如下所示 procedure TForm1.Button1Click(Sender: TObject); Var Resp : String; begin
我发现,当为 TIdHTTP 组件设置 ConnectTimeoout 属性时,它会使请求(GET 和 POST)变慢约 120 毫秒? 这是为什么,我可以以某种方式避免/绕过它吗? Env:D201
如何检查特定响应代码(例如 200 OK)的目标 URL,而 Indy 不会抛出各种异常。连接超时、连接正常关闭等... 例如,如果 URL 不正确或者找不到或无法访问其主机。即使我试图忽略它们,In
我目前有这个 TThread 将一些图像下载到桌面,这是线程代码: type TDownloadUpdateAnimateEvent = procedure(Sender: TObject; AA
我正在尝试运行此代码: var objHttp: TIdHTTP; ... objHttp.HandleRedirects := True; objHttp.AllowCookies :=
我正在尝试使用 TIdHTTP 上传文件。问题是当请求发送到服务器时访问 token 会发生更改。 我使用的访问 token 是fJNhDM6TlcpeVmD8h3jFuPJS71sxwZB8bZBX
主要目标是将所有数据发送到远程 mysql 数据库。我使用 TidHTTP 作为 POST 方法。拥有近 10.000 条记录,约 2MB 数据。当我运行delphi代码时,上传json数据。但有些记
我使用 IdHTTP.get 来获取 url 的 HTMl,但是在这个 url 中是一个用 ajax 加载的表,我必须等待几秒钟才能加载它,然后才能获取页面的 HTML。 我可以等一下吗? 最佳答案
我是一名优秀的程序员,十分优秀!