в общем потребовалось написать код скачки файлов с помощью winsock. посмотрел httpanalyzer-ом за браузером и отправил такой же запрос из программы, а потом парсил ответ от сервера и писал его в файл. вот что получилось: Code: var f:textfile; function GetIP(host:pchar): String; const WSVer = $101; var wsaData: TWSAData; P: PHostEnt; begin Result := ''; WSAStartup(WSVer, wsaData); P:=GetHostByName(host); if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^); WSACleanup; end; procedure TForm1.Button1Click(Sender: TObject); var ws:wsadata; sa:sockaddr_in; s:integer; q:string; i:integer; buf:array[1..128] of char; begin WSAStartup(makeword(2,2),ws); s:=socket(af_inet,sock_stream,0); sa.sin_addr.S_addr:=inet_addr(pchar(getip('zalil.ru'))); sa.sin_port:=htons(80); sa.sa_family:=af_inet; connect(s,sa,sizeof(sa)); q:='GET /30742288/465736c7.4d90c4d0/locker.exe HTTP/1.1'#13#10+ 'Host: zalil.ru'#13#10+ 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru-RU) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27'#13#10+ 'Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'#13#10+ 'Accept-Language: ru-RU'#13#10+ 'Accept-Encoding: gzip, deflate'#13#10+ 'Cookie: __utma=23564465.1632283247.1300560178.1301242129.1301247479.13; __utmz=23564465.1300560178.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'#13#10+ 'Connection: keep-alive'#13#10#13#10; showmessage(q); Send(s,q[1],length(q),0); AssignFile(f,'temp.tmp'); if fileexists('temp.tmp') then Reset(f) else rewrite(f); while recv(s,buf[1],128,0)>0 do begin write(f,buf); end; CloseFile(f); end; ответ приходит примерно такой: Code: HTTP/1.1 200 OK Server: nginx/0.3.17 Date: Mon, 28 Mar 2011 09:49:14 GMT Content-Type: application/octet-stream Content-Length: 30720 Last-Modified: Sat, 26 Mar 2011 13:02:52 GMT Connection: keep-alive Content-Disposition: attachment; filename=locker.exe Accept-Ranges: bytes { всякие кракозябры, а именно содержимое файла} потом вручную отделил http-заголовок от контента. и сравнил его с самим файлом(который надо скачать) в winhex-е: контент длиннее файла. теперь вопрос: как из ответа от сервера выделить контент (он после #13#10#13#10($0d $0a $0d $0a) идет, но я не знаю как программно найти в файле четыре последовательных байта(можно конечно читать по чертыре байта и сравнивать, но а если число байт до этой последовательности нечетное?) ) и из него считать количество байт указанное в content-length http-заголовка?
не ну это пздц. Ха такие вопросы надо лишать таких ников! Самый простой быдлокодовский метод - искать байт #13 и если находишь его то проверяешь следующие на #10#13#10 Если оно значит нашел, если не оно, значит ищи дальше. Или тупо заюзай обычный поиск через pos причем на стадии получения данных. Размер файла выдирай из строки Content-Length: