вобщем вот код Code: TProxy = record adrIA:TInAddr; adr:string[15]; port:integer; end; function checkHttp(Serv:String;Port:integer;proxy:TProxy):boolean; var sock:TSocket; addr:TSockAddrIn; Buff: array[0..255] of char; begin result:=false; FillChar(Addr.sin_zero, SizeOf(Addr.sin_zero), 0); addr.sin_family:=AF_INET; addr.sin_port:=htons(proxy.port); addr.sin_addr:=proxy.adrIA; connect(sock, @addr, SizeOf(addr)); str:='CONNECT '+serv+':'+inttostr(port)+' HTTP/1.0\r\nUser-Agent: Opera/9.60\r\n'; send(Sock,str,sizeof(str),0); FillChar(Buff,sizeof(Buff), 0); recv(sock2,Buff,sizeof(Buff),0); if buff[10]='2' then result:=true; closesocket(sock2); end; максимальное его упростил, пробовал уже и так и эдак, нифига не получаеться подвисает на recv(sock2,Buff,sizeof(Buff),0); потом ничего не принимает. вроде все просто, где чево не понимаю не могу найти.
Проверь снифером правильно запрос идет или нет. Но главное - HTTP хидер должен заканчиваться на 2 CRLF А теперь самое главное: str:='CONNECT '+serv+':'+inttostr(port)+' HTTP/1.0\r\nUser-Agent: Opera/9.60\r\n'; \r\n - это сишные и в Delphi такое не прокатит. и как видиш у тебя тока 1 CRLF вконце По этому перепиши: str:='CONNECT '+serv+':'+inttostr(port)+' HTTP/1.0'+#13#10+'User-Agent: Opera/9.60'+#13#10#13#10; СРазу видно что код не рабочий. str - вообще не объявлено нигде. если str - string то лучше send делать так: send(Sock,@str[1], length(str),0); А вообще судя по коду - это вообще недолно работать потому как ты даже сокет не создаеш. Выкини код и напиши нормальный, а не передирай из Си.
рабочий, просто выдран из контекста спасибо большое в этом проблема и была, переделал, все работает выдает ошибку Constant object cannot be passed as var parameter при компиляции (D6) send(Sock, str, sizeof(str), 0) работает нормально.
Code: int FindString(char *str1,char *str2) { int nstr1,nstr2,i,j,nstr,sstr; nstr1=strlen(str1); nstr2=strlen(str2); if(nstr1>nstr2) { nstr=nstr1-nstr2; for(i=0;i<nstr;i++) { sstr=0; for(j=0;j<nstr2;j++) { if(str1[j+i]==str2[j]) { sstr++; } } if(sstr==nstr2) { return 1; } } } else { return -1; } return 0; } int CheckProxy(char *proxy, int port) { SOCKADDR_IN anAddr; anAddr.sin_family = AF_INET; anAddr.sin_addr.S_un.S_addr = inet_addr(proxy); anAddr.sin_port = htons(port); SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); int tmo = 3000; setsockopt(Socket,SOL_SOCKET,SO_RCVTIMEO,(const char*)&tmo,sizeof(tmo)); int i; char Answer[40]; char HTTPAnswer[] = "HTTP/1.1"; connect(Socket, (struct sockaddr *)&anAddr, sizeof(struct sockaddr)); //SOCKS char Message2[] = {0x05,0x01,0x00}; send(Socket,Message2,3, 0); memset(Message2,0,3); recv(Socket, Message2, 3, 0); if(Message2[0]==0x05) { return 5; } else { //http char zSend[] = "GET / HTTP/1.1\r\nUser-Agent: Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1\r\nHost: www.google.com\r\nAccept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\nAccept-Language: ru-RU,ru;q=0.9,en;q=0.8\r\nAccept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\nAccept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\r\nCookie: rememberme=true;\r\nPREF=ID=cbb453ccc57c8739:TM=1228397956:LM=1228457555:GM=1:S=PD__kjM08drYVN99;\r\nNID=19=QiJDI3cjj8O4IHJ3M7LO81Clx9avdSixKEHLLgqFw1OtlYjy_Iqt-qOwO1WuTYj6_ZgNzf_eWRndnTWkAQ-N7hfii7nh7skDUtQtpMEsLFOq1MisvpHTzQn9g0FCZXwO;\r\nSID=DQAAAH0AAAAg2B1ks0PiX3lB6cSvZSSgCiGHwjea5TLv7CzWzH5q23MkMc7Ikj0h5pWoM4nrfSIVq-9upxKQd-QWc-NZkZNggOE425YOTsNEks-R3Zfae0k8tEpyLVG-aQI6zq90BlzIYB99XcDSfy\r\nb79S2_-80zTE82Q9PY-7VE5l2SrvTIw\r\nCookie2: $Version=1\r\nConnection: Keep-Alive, TE\r\nTE: deflate, gzip, chunked, identity, trailers\r\n\r\n"; send(Socket,zSend,strlen(zSend), 0); recv(Socket, Answer, 40, 0); if(FindString(Answer,HTTPAnswer)==1) return 3; } closesocket(Socket); return -1; } Когда то писал... определяет тип и живая не живая