60分求助帮忙看下这段代码.(最多耽误2分钟)(60分)

  • 主题发起人 主题发起人 DelphiVip
  • 开始时间 开始时间
D

DelphiVip

Unregistered / Unconfirmed
GUEST, unregistred user!
function 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 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(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;

这段代码可以获取Http头和网页源代码.
但是我想修改成只获取HTTP头 而不获取网页源代码 该怎么做? 谢谢.
[red]我的意思不是分割接收的协议头和网页代码,再得到http头.而是只获取http头.这样速度可能会快点[/red]
 
m_strTmp:= FormatHead('GET', SvrIP, strURL, SvrPort);
改成
m_strTmp:= FormatHead('HEAD', SvrIP, strURL, SvrPort);
 
谢谢您的回答,但是改了之后,程序就一直卡死了,几次都是.没改就可以接收到
 
查了下,卡是我这边的原因,但是最后什么都没接收到是怎么回事? .谢谢.
 
后退
顶部