当IdHttp遇上Transfer-Encoding: chunked

Bosman 2011-04-02 07:49:01
C++ Buider 2009

用idhttp Post一个表单,比如:

try
{
dt=(double)Now();//dt为double型
Http->Post(PostWeb,PostParam,HttpStream);
t=((double)Now()-dt)*86400000;
MainForm->MemoInfo->Lines->Add(FloatToStr(t));//使用时间(毫秒) }
catch(Exception &e)
{
MainForm->MemoInfo->Lines->Add(Http->ResponseText+" "+e.Message);
return -2;
}
Post的内容很少.但Post后服务器返回Transfer-Encoding: chunked的编码内容.并且内容也很短,不到300字节.

idhttp似乎在处理返回Transfer-Encoding: chunked编码这方面内容特别慢.
以上测试基本都在5秒以上才返回.同一网站,如果不是返回Transfer-Encoding: chunked编码的,不用一秒就返回.

上网找过资料,idhttp遇到响应是Transfer-Encoding: chunked编码的,只有等服务器与自己连接关闭才返回.

以上测试如下:
开始Post
6:31:22 AM 状态=Disconnecting.
6:31:22 AM 状态=Disconnected.
6:31:22 AM 状态=Resolving hostname www.aa3ew.com.
6:31:22 AM 状态=Connecting to 63.220.135.26.
6:31:22 AM 状态=Connected.//连接上
6:31:27 AM 状态=Disconnected.//读Transfer-Encoding: chunked内容结束
4996.00048642606 //消耗时间差不多功能5秒,甚至更长..

我的问题是:idhttp遇上Transfer-Encoding: chunked,处理是不是有Bug??
或是有什么方法加快处理接收Transfer-Encoding: chunked 编码的内容,不用等到服务器与idhttp关闭连接才返回.
...全文
455 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bosman 2011-04-07
  • 打赏
  • 举报
回复
代码我也看过.
idhttp执行时,有时是返回超时,实在上已post成功.有时post不成功,但返回404错误.
My_Love 2011-04-07
  • 打赏
  • 举报
回复
{但从Indy的代码来看,与上面协议显然不一致。}
begin
if AResponseContent <> nil then
begin
if Response.ContentLength <> 0 then
begin
ReadStream(AResponseContent, Response.ContentLength);
end
else
begin
if AnsiPos('chunked', Response.ExtraHeaders.Values['Transfer-Encoding'])
> 0 then {do not localize}
begin
DoStatus(hsText, [RSHTTPChunkStarted]);
Size := ChunkSize;
while Size > 0 do
begin
ReadStream(AResponseContent, Size);
ReadLn;
Size := ChunkSize;
end;
ReadLn;
end
else
begin
ReadStream(AResponseContent, -1, True);
end;
end;
end;
end;
My_Love 2011-04-07
  • 打赏
  • 举报
回复
只找到这一个理解HTTP协议中的"Transfer-Encoding: chunked",不知LZ是否看过。
Bosman 2011-04-04
  • 打赏
  • 举报
回复
Added TIdEventStream class. Primarily for use with TIdHTTP when dealing with chunked responses that are endless.
jone7319 2011-04-02
  • 打赏
  • 举报
回复
帮你顶一下,我是自己写个类来完成的,Indy的组件有时会遇到一些莫名其妙的问题
Bosman 2011-04-02
  • 打赏
  • 举报
回复
老妖啊..你快来啊.
内容概要:本文研究了考虑隐私保护的分布式联邦学习在居民电力负荷预测中的应用,提出了一种基于联邦学习框架的方法,使多个参与方能够在不共享原始数据的前提下协同训练高精度的负荷预测模型。该方法有效缓解了传统集中式数据收集带来的隐私泄露风险,结合Python实现了算法原型,并通过实验验证了其在保证预测性能的同时,具备良好的隐私保护能力。研究进一步分析了模型在不同数据分布、通信轮次和客户端数量下的适应性与鲁棒性,展示了其在智能电网、能源管理系统及需求侧管理中的广阔应用前景。; 适合人群:具备一定机器学习基础和电力系统背景的研究生、科研人员,以及从事智慧能源、数据隐私保护相关领域开发的工程师。; 使用场景及目标:①应用于居民侧用电行为建模与精细化负荷预测,提升电网调度与能源配置效率;②在确保用户数据本地化存储的前提下,实现跨区域、跨主体的能源数据协同分析;③为构建安全、可信、合规的新一代智能电力系统提供核心技术支撑。; 阅读建议:建议读者结合文中提供的Python代码进行动手实践,深入理解联邦学习的通信机制、模型聚合策略及隐私防护设计,并关注模型收敛性与隐私预算之间的权衡优化。
内容概要:本文围绕“考虑隐私保护的分布式联邦学习电力负荷预测研究”展开,提出了一种融合联邦学习框架与隐私保护机制的电力负荷预测方法,旨在解决传统集中式数据处理中潜在的用户隐私泄露问题。通过构建分布式模型训练体系,各参与方在本地完成模型训练,仅向中心服务器上传模型参数或梯度信息,实现“数据不动模型动”的协同建模模式,确保数据“可用不可见”。研究采用Python语言实现了完整的联邦学习流程,涵盖客户端本地训练、全局模型聚合、隐私保护策略(如差分隐私或同态加密)集成、通信机制设计及预测性能评估等核心模块,显著提升了电力负荷预测在隐私安全与模型精度之间的平衡能力。; 适合人群:具备Python编程基础和机器学习基础知识,从事电力系统、智能电网、能源大数据分析、数据隐私保护等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于居民或工业级电力负荷预测任务,在保障用户用电数据隐私的前提下实现高精度预测;②为构建符合数据合规要求的智慧能源管理系统提供技术支撑;③推动联邦学习在能源互联网、跨企业数据协作等场景中的落地应用,促进多方协同建模与数据价值释放。; 阅读建议:建议读者结合文中提供的Python代码进行实践操作,重点关注联邦学习的通信轮次设置、本地训练迭代策略、模型聚合算法设计以及隐私噪声添加机制的实现细节,并可根据实际需求替换底层预测模型(如LSTM、XGBoost、Transformer等)以进一步优化预测性能。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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