
11.03.2009, 21:16
|
|
Участник форума
Регистрация: 08.10.2007
Сообщений: 259
Провел на форуме: 500748
Репутация:
137
|
|
Я вот всё пытаюсь загрузить файл по средствам сокетов
Код:
var Site : PChar;
sock : TSocket;
HostEnt : PHostEnt;
WSA : TWSAData;
addr : sockaddr_in;
sendbuff : String;
PostData : String;
f:TextFile;
i:integer;
buf:array[0..255] of char;
begin
if WSAStartup($0101, WSA) <> 0 then
Exit;
sock := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
FillChar(addr, SizeOf(sockaddr_in), 0);
addr.sin_family := AF_INET;
addr.sin_port := htons(80);
Site := 'www.google.ru';
HostEnt := gethostbyname(Site);
addr.sin_addr.s_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
Connect(sock, addr, SizeOf(addr));
sendbuff := 'GET /images/nav_logo3.png HTTP/1.0'#13#10+
'Accept: */*;q=0.1'#13#10+
'Referer: http://www.google.ru/search?hl=ru&newwindow=1&q=zz&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=&aq=f&oq='#13#10+
'Accept-Language: ru'#13#10+
'Proxy-Connection: Keep-Alive'#13#10+
'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.8 (build 01709); .NET CLR 1.1.4322)'#13#10+
'Host: www.google.ru'#13#10#13#10;
send(sock, sendbuff [1], Length(sendbuff), 0);
AssignFile(f, 'logo.html');
Rewrite(f);
repeat
i := recv(sock, buf, sizeof(255), 0);
write(f, copy(buf,1,i));
until
(i = 0) or (i = SOCKET_ERROR);
CloseSocket(sock);
CloseFile(f);
end;
но в файл, как и положено вместе с телом запроса добавляется и header
Код:
HTTP/1.0 200 OK
Content-Type: image/png
Last-Modified: Wed, 11 Feb 2009 03:40:02 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Cache-Control: public
Date: Wed, 11 Mar 2009 17:10:09 GMT
Server: gws
Content-Length: 6339
Age: 3
Connection: Close
как этого избежать и не будет ли файл битым или тело запроса нужно ещё шифровать в base64 перед приёмом?
|
|
|