Code: uses ..., IdHTTP; ...... var http:TIdHTTP; s:string; begin http := TIdHTTP.Create(Nil); s := http.Get('http://forum.antichat.ru'); delete(s, 1, pos('<title>', s)+length('<title>')-1); s := copy(s, 1, pos('</', s)-1); ShowMessage(s); http.Free; end; Этот код выведет "Форум АНТИЧАТ - безопасность WEB - интерфейсов" П.С. сорри, если с ошибками, писал "на коленке"
PHP: Buff := 'GET / HTTP/1.1'#13#10+ 'host: vk.com'#13#10+ 'Connection: close'#13#10+ #13#10; WSAStartup(MAKEWORD(2, 0), inf); Server.s_addr := inet_addr(PChar('87.240.131.104')); sockaddr.sin_family := AF_INET; sockaddr.sin_port := htons(80); sockaddr.sin_addr := Server; socks:=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); connect(socks, sockaddr, sizeof(sockaddr)); send(socks, buff, length(buff), 0); repeat FillChar(Buff2, SizeOf(Buff2),0); d:=recv(socks,Buff2, SizeOf(Buff2),0); for i := 1 to d do write(Buff[i]); until d<=0; closesocket(socks); WSACleanup; При попытке коннекта на 80 порт выбивает i/o error 105. Что не так?
для начала хотя бы делай минимальную обработку ошибок: Code: function getIP(Host: PChar): PChar; var PHost: PHostEnt; begin PHost:= GetHostByName(Host); if (PHost = nil) then Result:= nil else Result:= inet_ntoa(PInAddr(PHost.h_addr_list^)^); end; var wsaData: TWSAData; hSocket: TSocket; SockAddrIn: TSockAddrIn; // cURL: TCurl; const Port = 80; Host = 'vk.com'; begin WSAStartup($0202, wsaData); hSocket:= WSASocket(AF_INET, SOCK_STREAM, 0, nil, 0, 0); if hSocket <> INVALID_SOCKET then try FillChar(SockAddrIn, SizeOf(SockAddrIn), 0); SockAddrIn.sin_family:= AF_INET; SockAddrIn.sin_port:= htons(Port); SockAddrIn.sin_addr.s_addr:= inet_addr(getIP(Host)); if (WSAConnect(hSocket, @SockAddrIn, SizeOf(TSockAddr), nil, nil, nil, nil) = SOCKET_ERROR) then begin // Error connect ......... Exit; end; ......... send(hSocket, lpData^, cdLen, 0); ......... recv(hSocket, lpData^, 8192, 0); ......... finally closesocket(hSocket); end; WSACleanup;
Попробуй не через IP, а через http://vk.com коннектиться, потому что 87.240.131.104 это IP http://vkontakte.ru
PHP: try app:=IdHTTP1.Get('http://vk.com/app'+edit3.text+''); except if Idhttp1.response.ResponseCode=404 then Memo1.lines.Add ('Введите id приложения') else if idHTTP1.ResponseCode=200 then begin Delete(app,1,pos('"auth_key":',app)+length('"auth_key":')); Delete(app,pos('",',app),length(app)); Memo2.Lines.Add (app); end; При нажатии на кнопку ничего не происходит.
а почему ты ответ с кодом 200 ловишь в эесепшине? ответ от сервера с кодом 200 не вызывает у инди эксепшинов, так что правильно будет вот так: Code: try app:=IdHTTP1.Get('http://vk.com/app'+edit3.text+''); Delete(app,1,pos('"auth_key":',app)+length('"auth_key":')); Delete(app,pos('",',app),length(app)); Memo2.Lines.Add (app); except if Idhttp1.response.ResponseCode=404 then Memo1.lines.Add ('Введите id приложения') end;
Это не так важно. Соль в том, что программа шлет запрос на http://vk.com/app, но оттуда не получает нужную информацию.
Это очень важно, так как если сервер отдает код 200 (ОК), то код заключенный в except end не будет выполняться, то есть парсинг auth_key и вывод его в Мемо выполняться не будет.
авторизацию перед этим проходишь? куки получаешь/отправляешь? попробуй сразу с авторизацией: Code: var app, login, pass:string; cook : TIdCookieManager; begin login := '[email protected]'; //логин pass := 'pass'; //пасс idHTTP1.HandleRedirects := true; cook := TIdCookieManager.Create(IdHTTP1); IdHTTP1.CookieManager := cook; try idhttp1.Get('http://vkontakte.ru/login.php?email='+login+'&pass='+pass); app:=IdHTTP1.Get('http://vk.com/app'+'2434206'+''); except if Idhttp1.response.ResponseCode=404 then Memo1.lines.Add ('Введите id приложения') else if idHTTP1.ResponseCode=200 then begin Delete(app,1,pos('"auth_key":',app)+length('"auth_key":')); Delete(app,pos('",',app),length(app)); Memo1.Lines.Add (app); end; end;
PHP: var Line: String; procedure myThrd.FormAddLine; begin Form1.Caption := Line; end; function myThrd.Authorize(Login,Password: String): String; var ST: TStringStream; HTTP: TIdHTTP; begin HTTP := TIdHTTP.Create(nil); HTTP.HandleRedirects := true; ST := TStringStream.Create(''); try HTTP.Get('http://site1.com'); HTTP.Get('http:site2.com',ST); Result := ST.DataString; finally ST.Free; HTTP.Free; end; end; procedure myThrd.Execute; var Page: String; begin Page := Authorize('a-sarukhanova','kukushka'); if Pos('logout',Page) <> 0 then Line := 'good' else Line := 'bad'; Synchronize(FormAddLine); end; Код потока. Не выполняется процедува FormAddLine. Без ф-ции Authorize все работает. Почему?
PHP: function myThrd.Authorize(Login,Password: String): String; var ST: TStringList; HTTP: TIdHTTP; begin HTTP := TIdHTTP.Create(nil); HTTP.HandleRedirects := true; ST := TStringList.Create; try HTTP.Get('http://site1.com'); ST.Text:=HTTP.Get('http://site2.com'); Result := ST.Text; finally ST.Free; HTTP.Free; end; end; А так ?
Доброго времени. Стоит инди 10.5.8.0. Работаю с сайтами имеющими домен 3-го уровня. Куки менеджер напрочь отказывается передавать кукисы. Помню когда-то был фикс для модулей куки менеджера, но найти ничего не нашел. Вобщем если кто сталкивался и решил, просьба поделиться опытом.
Подскажите как сделать чтобы файлы грузились из определенной папки по порядку и после проверки сохранялись с таким же названием в другую папку
подскажите как заставить работать браузер с прокси листом. (при нажатии на кнопку идет след. прокси).