请教高手bcb定时抓取网页数据并处理的问题?

dlx_gd727000 2011-03-23 04:22:42
请教高手bcb定时抓取网页数据并处理的问题?
(最少每分钟一次)
1.用NMHTTP还是IdHTTP?或者其它更好的方式?
用NMHTTP不定期出错?一分钟内多次抓取出错,好象是已经连接的问题,能不能先断开再抓取?
//---------------------------------------------------------------------------
AnsiString __fastcall get_http_html(char* htt)
{
AnsiString ss;
try{
// 能不能先断开再抓取?
Form1->NMHTTP1->TimeOut = 30000;
Form1->NMHTTP1->InputFileMode = false;
Form1->NMHTTP1->OutputFileMode = false;
Form1->NMHTTP1->ReportLevel = Status_Basic;
if(Form1->NMHTTP1->Connected==false)
Form1->NMHTTP1->Get(htt);
ss=Form1->NMHTTP1->Body;
}
catch(...)
{
}
return ss;
}
2.定时器Timer工作时程序界面停止响应,如果用线程,程序框架该怎样写?

//---------------------------------------------------------------------------
void __fastcall TForm1::TimerworkTimer(TObject *Sender)
{
get_min_http((get_http_html2(all_http.c_str())).c_str()); //抓取
view_min(); //计算并显示
}
...全文
200 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dlx_gd727000 2011-03-25
  • 打赏
  • 举报
回复
又有新错误:
class EAbortError with message'Socket capture aborted'
与NMHTTP有关吗?
dlx_gd727000 2011-03-25
  • 打赏
  • 举报
回复
改成线程后出现错误
c++ 10038 - Socket operation on non-socket
dlx_gd727000 2011-03-24
  • 打赏
  • 举报
回复
谢谢妖哥,我试试
ccrun.com 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dlx_gd727000 的回复:]
每分钟1次或两次,在线程中如何定时?相关的代码是否都要由线程调用?
[/Quote]

不是说在线程中定时,而是说,你搞一个线程,只用来抓取网页,由主线程的定时器动态的调用这个线程。
从TThread继承一个类即可。
Infiltration 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dlx_gd727000 的回复:]

得到妖哥指点,受宠若惊;
没有放到线程中是因为抓的是股票数据,每分钟1次或两次,在线程中如何定时?相关的代码是否都要由线程调用?
能否给一个用线程抓取网页数据的代码?
请问2楼:
是否有
Form1->NMTTP1->Disconnect();
[/Quote]
没用过那个控件、
dlx_gd727000 2011-03-23
  • 打赏
  • 举报
回复
得到妖哥指点,受宠若惊;
没有放到线程中是因为抓的是股票数据,每分钟1次或两次,在线程中如何定时?相关的代码是否都要由线程调用?
能否给一个用线程抓取网页数据的代码?
请问2楼:
是否有
Form1->NMTTP1->Disconnect();

Infiltration 2011-03-23
  • 打赏
  • 举报
回复
Form1->IdHTTP1->Disconnect();
这样即可、
ccrun.com 2011-03-23
  • 打赏
  • 举报
回复
用什么都一样. 直接用socket API也行, 建议放到另外的线程中执行, 抓取网页时, 还要考虑缓冲的问题.

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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