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

  #114  
Старый 06.06.2007, 18:47
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

А я не парясь мучаюсь вот так вот:
Код:
procedure timeouts(wnd:hwnd;uMsg:UINT;id:UINT;dwtime:dword);stdcall;
begin
tout:=true;
closesocket(socket_id);
end;

function send_packs(ip:string; port:word; send_buf:string; var recv_buf:string):integer;
var
SockAddrIn: TSockAddrIn;
tmp_buf:array[1..1024] of char;
len:longint;
begin
result:=-10;
socket_id:=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if socket_id=WINDOWS.INVALID_HANDLE_VALUE then exit;
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_port := htons(port);
SockAddrIn.sin_addr.s_addr := inet_addr(Pansichar(ip));
result:=-20;
if Connect(socket_id, @SockAddrIn, SizeOf(SockAddrIn))<>0 then exit;
tout:=false;
windows.SetTimer(form1.Handle,1,30000,@timeouts);
send(socket_id,send_buf[1],length(send_buf),0);
recv_buf:='';
repeat
len:=recv(socket_id,tmp_buf,1024,0);
recv_buf:=recv_buf+copy(tmp_buf,1,len);
until len<=0;
killtimer(form1.Handle,1);
result:=-30;
if tout=true then exit;
result:=length(recv_buf);
closesocket(socket_id);
end;
Чисто делал код под многопаточную работу через прокси с использованием TIMEOUT

примет юзанья:
Код:
buf_send:=
   'GET http://xz.org/? HTTP/1.0'#13#10+
   'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*'#13#10+
   'Referer: http://xz.ru/'#13#10+
   'Accept-Language: ru-ru'#13#10+
   'Proxy-Connection: Keep-Alive'#13#10+
   'User-Agent: Mozilla/5.0 (compatible; MSIE 6.0; SV1; MRA 4.8 (build 01705))'#13#10+
   'Host: xz.org'#13#10#13#10;

case send_packs(proxy[x].ip,proxy[x].port,buf_send,buf_recv) of
-10:begin
     form1.memo2.Lines.Add('Ошибка создания сокета');
     goto m1;
    end;
-20:begin
     form1.memo2.Lines.Add(proxy[x].ip+' > дохлый');
     goto m1;
    end;
-30:begin
     form1.memo2.Lines.Add(proxy[x].ip+' > TIME OUT');
     goto m1;
    end;
  0:begin
     form1.Memo2.Lines.Add(proxy[x].ip+' > Ошибка прокси');
     goto m1;
    end;
end;
НУ и как всегд не надо забывать перед выполнением этого делать:
Код:
if WSAStartup($202, WSAData)=-1 then
 begin
  memo2.Lines.Add('Ошибка WSAStarup');
  exit;
 end;
Вся система держится на базе winsock2.

Или есть вот пример юзанья через WinInet с использованием SSL. Хотя его можно отрубить!
Код:
function zapros(login,pass,proxy_ip:string;proxy_port:word):string;
var
h_open:HINTERNET;
h_connect:HINTERNET;
h_request:HINTERNET;
mas:array of char;
s,outs:string;
l:integer;
begin
result:='- InternetOpen';
if proxy_ip<>'' then
h_open:=InternetOpen('Mozilla/5.0 (compatible; MSIE 6.0; SV1; MRA 4.8 (build 01705))',INTERNET_OPEN_TYPE_PROXY,Pansichar(proxy_ip+':'+inttostr(proxy_port)),nil,0)
else
h_open:=InternetOpen('Mozilla/5.0 (compatible; MSIE 6.0; SV1; MRA 4.8 (build 01705))',INTERNET_OPEN_TYPE_DIRECT,nil,nil,0);
if h_open=nil then exit;
result:='- InternetConnect';
h_connect:=InternetConnect(h_open,'hz.ru',INTERNET_DEFAULT_HTTPS_PORT,nil,nil,INTERNET_SERVICE_HTTP,0,0);
if h_connect=nil then exit;
setlength(mas,1024);
lstrcpy(Pansichar(mas),'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*');
result:='- HttpOpenRequests';
h_request:=HttpOpenRequest(h_connect,'POST','/','HTTP/1.0','hz.ru',@mas,INTERNET_FLAG_SECURE+INTERNET_FLAG_KEEP_CONNECTION,0);
if h_request=nil then exit;
randomize;
s:='login='+login+'pass='+pass;
lstrcpy(Pansichar(mas),Pansichar(s));
HttpSendRequest(h_request,'Content-Type: application/x-www-form-urlencoded', 47,mas,length(s));

setlength(mas,1024);
outs:='';
repeat
InternetReadFile(h_request,mas,1024,cardinal(l));
s:=copy(Pchar(mas),1,l);
outs:=outs+s;
until l<=0;
result:='- PASSWORD ERROR';
if pos('Вы ввели неправильный пароль.',outs)<>0 then exit;
result:='+ ОК';
wininet.InternetCloseHandle(h_open);
end;

Последний раз редактировалось slesh; 06.06.2007 в 18:55..
 
Ответить с цитированием