我想获取get信息到一个网站上所返回的信息.比如我用:IDhttp,可以用IdHTTP1.Response.ResponseCode获取返回的代码.但是我想获取一个网站返回的所有信息,比如长度,主机地址等,其实也就是获取它的HTTP头.该怎么获取..IDHTTP有点慢,貌似可以用winsock 里的recv函数吧? 但是不知道怎么用啊.麻烦给个简单通俗的例子看看,别发一大串的,好吗?

解决方案 »

  1.   

       调用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;
      

  2.   

    太谢谢了,但我调用TSearchThread.GetURLContent 这里有点小问题.
    第一个函数是写IP,第二函数是写端口吧?第三个写网址?为什么总是返回该页无法找到..? 谢谢 马上结贴