Показать сообщение отдельно

  #9  
Старый 22.02.2009, 20:28
De-visible
Banned
Регистрация: 06.01.2008
Сообщений: 904
С нами: 9655526

Репутация: 1821


По умолчанию

Цитата:
Сообщение от eLWAux  
реализация через сокети:
Код:
uses ...,WinSock, ..;
const host = 'www.google.com'; //хост
....
var sock : TSocket;
....
function create_packet(url:string):string;
begin
 result := 'GET '+url+' HTTP/1.0' + #13#10 +
         'Host: ' + Host + #13#10 +
         'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)' + #13#10 +
         'Accept: text/html' + #13#10 +
         'Keep-Alive: 300'+ #13#10 +
         'Referer: '+url+ #13#10 +
         'Connection: keep-alive' + #13#10#13#10;
end;


function GET(packet: string): string;
var
 wData : WSADATA;
 addr  : sockaddr_in;
 sock  : integer;
 error : integer;
 buf   : array [0..1023] of Char;
 str   : string;
 phe   : PHostEnt;
begin
 Result := '';
 WSAStartup($0101, wData);
 phe := gethostbyname(PChar(string(host)));
 if phe = nil then begin
    WSACleanup;
    exit;
 end;
 
 sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 if sock = INVALID_SOCKET then begin
    WSACleanup;
    exit;
 end;

 addr.sin_family := AF_INET;
 addr.sin_port   := htons(80);
 addr.sin_addr   := PInAddr(phe.h_addr_list^)^;
 error := connect(sock, addr, sizeof(addr));

 if error = SOCKET_ERROR then begin
    closesocket(sock);
    WSACleanup;
    exit;
 end;
 
 //str := 'GET '+url + ' HTTP/1.0'#13#10#13#10;
 str:=packet;
 send(sock, str[1], Length(str), 0);

 ZeroMemory(@buf, 1024);
 error := recv(sock, buf, 1024, 0);
 while error > 0 do begin
   Result := Result + Copy(buf, 0, error);
   error  := recv(sock, buf, 1024, 0);
 end;

 closesocket(sock);
 WSACleanup;
 if Result <> '' then Result:=Copy(Result, pos(#13#10#13#10, Result)+4,Length(Result));
end; 

var answ : string;
answ := get( create_packet('http://www.google.com/') );
сохранение в файл:
Код:
  AssignFile(myFile, 'file.txt');
   ReWrite(myFile);
   WriteLn(myFile, answ);
   CloseFile(myFile);
ну и прочитать в listbox стандартно:
Код:
listbox1.items.loadfromfile('file.txt');
Ну да да да, что бы получить ОДНУ СТРАНИЦУ, мы используем сокеты... показуха какая то...

Получаем страницу с помощью TidHTTP и парсим регуляркой...

Пользоваться сокетами нужно там где они действительно нужны...
 
Ответить с цитированием