问了几次都没人回答我,哎。。。。。CSDN啊!!! 我想获取get信息到一个网站上所返回的信息.比如我用:IDhttp,可以用IdHTTP1.Response.ResponseCode获取返回的代码.但是我想获取一个网站返回的所有信息,比如长度,主机地址等,其实也就是获取它的HTTP头.该怎么获取..IDHTTP有点慢,貌似可以用winsock 里的recv函数吧? 但是不知道怎么用啊.麻烦给个简单通俗的例子看看,别发一大串的,好吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 调用GetURLContent就可以获取整个网站的内容,如果只要头,在recv那个地方判断改成判断得到的数据是否是以#13#10结尾的就OK了.function TSearchThread.FormatHead(Method, SvrIP: string; strURL: string; SvrPort: integer): string;begin Result:= Method + ' /'+ strURL +' HTTP/1.1'#13#10; //Get Head Result:= Result + 'Referer: http://' + SvrIP; if SvrPort <> 80 then Result:= Result + ':' + IntToStr(SvrPort); Result:= Result + '/' + strURL + #13#10; Result:= Result + 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)'#13#10; Result:= Result + 'Host: ' + SvrIP; if SvrPort <> 80 then Result:= Result + ':' + IntToStr(SvrPort); Result:= Result + ''#13#10; Result:= Result + 'Connection: Close'#13#10; Result:= Result + 'Cache-Control: no-cache'#13#10; Result:= Result + #13#10;end;function TSearchThread.GetURLContent(SvrIP: string; SvrPort: integer; strURL: string): string;var m_wsData: TWSAData; m_Sock: TSocket; m_Host: PHostEnt; m_addr: sockaddr_in; m_Buf : array[0..1023] of char; m_iLen: integer; m_strTmp: string;begin Result:= ''; WSAStartUp(MAKEWORD(2, 2), m_wsData); m_Sock:= Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); m_Host:= GetHostByName(PChar(SvrIP)); if m_Host = nil then exit; FillChar(m_addr, SizeOf(m_addr), 0); m_addr.sin_family:= AF_INET; m_addr.sin_Port := htons(SvrPort); m_addr.sin_addr.S_addr:= PDWORD(PDWORD(m_Host.h_addr)^)^; Connect(m_Sock, m_addr, SizeOf(m_addr)); m_strTmp:= FormatHead('GET', SvrIP, strURL, SvrPort); //Send data to server Send(m_Sock, PChar(m_strTmp)^, Length(m_strTmp), 0); while true do begin m_iLen:= Recv(m_Sock, m_Buf, SizeOf(m_Buf), 0); if (m_iLen < 1) then break; SetString(m_strTmp, m_Buf, m_iLen); Result:= Result + m_strTmp; end; CloseSocket(m_Sock); WSACleanUp;end; 太谢谢了,但我调用TSearchThread.GetURLContent 这里有点小问题.第一个函数是写IP,第二函数是写端口吧?第三个写网址?为什么总是返回该页无法找到..? 谢谢 马上结贴 如何计算 Access 的空间利用率 关于多线程中如何传递参数? 300分求《信息时代的管理信息系统 》电子版,斑竹手下留情 窗口初始化时运行过程代码加在哪,在哪调用? 有关ShellExecute打开PDF文件的问题. 小弟要考软件设计师-求建议 动态链接库问题 送分的问题....如果控制tedit只能输入数字.. 請問哪里有Delphi書籍(電子版的)? dephi可以实现类似于Vb的控件数组,和DoEvent功能吗?有没有例程 怎样用程序禁用、启用网络连接 懂点VC变量的看过来,怎么转Delphi
SvrPort: integer): string;
begin
Result:= Method + ' /'+ strURL +' HTTP/1.1'#13#10; //Get Head
Result:= Result + 'Referer: http://' + SvrIP; if SvrPort <> 80 then
Result:= Result + ':' + IntToStr(SvrPort); Result:= Result + '/' + strURL + #13#10;
Result:= Result + 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)'#13#10;
Result:= Result + 'Host: ' + SvrIP; if SvrPort <> 80 then
Result:= Result + ':' + IntToStr(SvrPort); Result:= Result + ''#13#10;
Result:= Result + 'Connection: Close'#13#10;
Result:= Result + 'Cache-Control: no-cache'#13#10; Result:= Result + #13#10;
end;function TSearchThread.GetURLContent(SvrIP: string; SvrPort: integer;
strURL: string): string;
var
m_wsData: TWSAData;
m_Sock: TSocket;
m_Host: PHostEnt;
m_addr: sockaddr_in;
m_Buf : array[0..1023] of char;
m_iLen: integer;
m_strTmp: string;
begin
Result:= ''; WSAStartUp(MAKEWORD(2, 2), m_wsData); m_Sock:= Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
m_Host:= GetHostByName(PChar(SvrIP)); if m_Host = nil then
exit; FillChar(m_addr, SizeOf(m_addr), 0);
m_addr.sin_family:= AF_INET;
m_addr.sin_Port := htons(SvrPort);
m_addr.sin_addr.S_addr:= PDWORD(PDWORD(m_Host.h_addr)^)^; Connect(m_Sock, m_addr, SizeOf(m_addr)); m_strTmp:= FormatHead('GET', SvrIP, strURL, SvrPort);
//Send data to server
Send(m_Sock, PChar(m_strTmp)^, Length(m_strTmp), 0); while true do
begin
m_iLen:= Recv(m_Sock, m_Buf, SizeOf(m_Buf), 0); if (m_iLen < 1) then break; SetString(m_strTmp, m_Buf, m_iLen);
Result:= Result + m_strTmp;
end; CloseSocket(m_Sock);
WSACleanUp;
end;
第一个函数是写IP,第二函数是写端口吧?第三个写网址?为什么总是返回该页无法找到..? 谢谢 马上结贴