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

  #7  
Старый 31.01.2010, 00:11
GlooK
Участник форума
Регистрация: 20.04.2007
Сообщений: 174
Провел на форуме:
2310282

Репутация: 149
По умолчанию

Цитата:
fWSRecv('ya.ru',
'GET /logo.png HTTP/1.1' + CRLF +
'Host: ya.ru' + CRLF +
'Connection: close' + CRLF + CRLF);
Только есть маленький нюанс - нужно убирать заголовки, которые возвратит запрос.

или вот пример:
Цитата:
function DownloadFile(host:string; port:word; script:string; outfile:string):integer;
var
header : string;
sock : dword;
ip : dword;
hst : PHostEnt;
addr : sockaddr_in;
data_flag : boolean;
len : integer;
h : dword;
rb : dword;
buf : array [0..4095] of char;

begin
data_flag := false;
result := 0;
header := 'GET '+script+' HTTP/1.0'#13#10+
'Host: '+ host + #13#10#13#10;

ip := inet_addr(pchar(host));
if ip = INADDR_NONE then
begin
hst := gethostbyname(pchar(host));
if hst = nil then exit else ip := pinaddr(hst^.h_addr^)^.S_addr;
end;

sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if sock = INVALID_SOCKET then exit;

addr.sin_family := AF_INET;
addr.sin_port := htons(port);
addr.sin_addr.S_addr := ip;

if connect(sock, @addr, sizeof(addr)) = 0 then
begin
send(sock, header[1], length(header), 0);
while (TRUE) do
begin
len := recv(sock, buf, 4096, 0);
if len > 0 then
begin
if data_flag then
begin
WriteFile(h, buf, len, rb, nil)
result := result + len;
end
else
begin
rb := pos(#13#10#13#10, string(buf));
if rb > 0 then
begin
rb := rb + 3;
h := CreateFile(pchar(outfile), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if h = INVALID_HANDLE_VALUE then break;
data_flag := true;
WriteFile(h, buf[rb], len - rb, rb, 0);
result := result + len - rb;
end;
end;
end else break;
end;
end;
if data_flag then CloseHandle(h);
closesocket(sock);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
code : integer;
begin
code := DownloadFile('127.0.0.1', 80, '/f.jpg', 'C:\file.jpg');
if code > 0 then
begin
MessageBox(form1.Handle, 'OK', 'OK', MB_OK);
end
else
begin
MessageBox(form1.Handle, 'ERRROR', 'ERROR', MB_OK);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
ws : TWSAData;
begin
WSAStartup($202, ws);
end;

Последний раз редактировалось GlooK; 31.01.2010 в 00:14..
 
Ответить с цитированием