首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

问了几次都没人回答小弟我,哎。CSDN啊

2012-02-27 
问了几次都没人回答我,哎。。。。。CSDN啊!!!我想获取get信息到一个网站上所返回的信息.比如我用:IDhttp,可以用

问了几次都没人回答我,哎。。。。。CSDN啊!!!
我想获取get信息到一个网站上所返回的信息.

比如我用:IDhttp,可以用IdHTTP1.Response.ResponseCode获取返回的代码.

但是我想获取一个网站返回的所有信息,比如长度,主机地址等,其实也就是获取它的HTTP头.

该怎么获取..IDHTTP有点慢,貌似可以用winsock 里的recv函数吧? 但是不知道怎么用啊.麻烦给个简单通俗的例子看看,

别发一大串的,好吗?

[解决办法]
调用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;

热点排行