有什么比较好的HTTP控件?

dolphi 2002-06-22 10:21:01
BCB自带的HTTP1.0控件在等待服务器返回数据的时候很耗费cpu资源(90%)。请问有什么比较好的控件?
...全文
64 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lj_csdn 2002-06-22
  • 打赏
  • 举报
回复
曾经作了一个用线程和socket取网页内容的程序,

主要的部分如下:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>

#include "requestwww.h"
#pragma package(smart_init)

__fastcall requestwww::requestwww(bool CreateSuspended,char *host,char *ip,char *url,char *htmlfile,int *returnvalue,char *errormessage)
: TThread(CreateSuspended)
{ FreeOnTerminate=true;
strcpy(HOST,host);
strcpy(IP,ip);
strcpy(URL,url);
strcpy(HTMLFile,htmlfile);
ErrorMessage=errormessage;
ReturnValue=returnvalue;
strcpy(ErrorMessage,"连接:");
strcat(ErrorMessage,HOST);
*ReturnValue=1;
}

void __fastcall requestwww::Execute()
{ char *p,s[1024];
long size;
int i,endrecv;
DWORD tick,nwrt;
DeleteFile(HTMLFile);
fp=CreateFile(HTMLFile,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if (fp==INVALID_HANDLE_VALUE)
{ sprintf(ErrorMessage,"创建文件%s失败!");
*ReturnValue=0;
return;
}
strcpy(s,"GET ");
p=strstr(URL,HOST);
if (p) { p+=strlen(HOST); if (p[0]=='/') strcat(s,p); else strcat(s,"/");}
else strcat(s,"/");
strcat(s," HTTP/1.0\r\n");
strcat(s,"Host: ");
strcat(s,HOST);
strcat(s,"\r\n");
strcat(s,"Accept: www/source, text/html, video/mpeg, image/jpeg, image/x-tiff\r\n");
strcat(s,"Accept: image/x-rgb, image/x-xbm, image/gif, */*, application/postscript\r\n");
strcat(s,"Content-type: application/x-www-form-urlencoded\r\n\r\n");
if (http.Connect(0,IP,80)!=0)
{ CloseHandle(fp);
sprintf(ErrorMessage,"连接:%s失败!",HOST);
*ReturnValue=0;
return;
}
sprintf(ErrorMessage,"发送:%s",URL);
*ReturnValue=(*ReturnValue)+1;
http.Send(s,strlen(s)+1);
size=0;
tick=GetTickCount();
endrecv=0;
while (GetTickCount()-tick<60000)
{ if (http.Recv()<0)
{ http.Close();
CloseHandle(fp);
strcpy(ErrorMessage,"连接被对方断开!");
*ReturnValue=0;
return;
}
i=http.Length();
if (i)
{ tick=GetTickCount();
size+=i;
p=http.Read();
WriteFile(fp,p,i,&nwrt,NULL);
if (strstr(p,"</html>")) endrecv=1;
else endrecv=0;
http.Clear(0);
sprintf(ErrorMessage,"recv:%ld",size);
*ReturnValue=(*ReturnValue)+1;
if (endrecv) break;
}
}
http.Close();
CloseHandle(fp);
if (endrecv) sprintf(ErrorMessage,"接收网页完成,共%ld字节!",size);
else strcpy(ErrorMessage,"接收网页超时!");
*ReturnValue=0;
}

//GET / HTTP/1.0\r\n
//Host: 168.171.1.170\r\n
//Accept: www/source, text/html, video/mpeg, image/jpeg, image/x-tiff\r\n
//Accept: image/x-rgb, image/x-xbm, image/gif, */*, application/postscript\r\n
//Content-type: application/x-www-form-urlencoded\r\n"

我不懂电脑 2002-06-22
  • 打赏
  • 举报
回复
自己用http协议

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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