Вот код на получение капчи procedure TForm1.Button1Click(Sender: TObject); var CM: TIdCookieManager; captcha1:TMemoryStream; captcha2:TMemoryStream; ID, pref: String; begin ID:=edit1.text; pref:= edit2.Text; CM:= TidCookieManager.Create(IdHTTP1); IdHTTP1.AllowCookies:=True; IdHTTP1.CookieManager:=CM; IdHTTP1.HandleRedirects:=True; captcha1:=TMemoryStream.Create; captcha2:=TMemoryStream.Create; idhttp1.Request.Referer:=('http://l2top.ru/vote/' + ID + '/?prefix='+pref); idhttp1.Get('http://l2top.ru/getimg.php?47',captcha1); captcha1.SaveToStream(captcha1); captcha1.SaveTofile('captcha1.jpeg'); Image1.Picture.LoadFromfile('captcha1.jpeg'); Edit5.Text:= idhttp1.Request.Referer; idhttp1.Request.Referer:=('http://l2top.ru/vote/' + ID + '/?prefix='+pref); idhttp1.Get('http://l2top.ru/getimg.php?610',captcha2); captcha2.SaveToStream(captcha2); captcha2.SaveTofile('captcha2.jpeg'); Image2.Picture.LoadFromfile('captcha2.jpeg'); end; Кто нибудь может показать, как и куда отправить эту капчу? Часа 2 искал что куда, пытался разобраться как, вобщем не получилось.
Открываешь страницу, где просят ввести ник и капчу, Исходный код, находишь <form .... и выбираешь action= .... // на какой скрипт отправляется форма input name="..." // тут смотришь имя, которая отвечает за капчу и ник, делаешь связку и отправляешь. P.s. и зачем плодить темы, Создал одну в ней бы и писал.
Имеется вот такая строчка html документа: <form action="free.php" method="post"><table> <tr><th align="left"><font size="1" face="Tahoma">Ваш eMail:<br><br>Код подтверждения: <br><input type="submit" value="Получить "><th align="left"><input type="text" name="email"><p><input type="text" name="keystring"><br><th align="left"><img src="cp.php?PHPSESSID=57lgimm74385h9qi9dvrthkd47"></table></form></font><br> помогите правиль отправить POST запрос на сервер. И еще, тут есть такая строчка интересная - PHPSESSID=57lgimm74385h9qi9dvrthkd47 При каждом новом запросе это значение меняется, вот хотелось бы еще сделать обработчик, чтобы допустим в memo1 грузился текст 1.html и нажав на кнопку в memo2 вывелось значение (в нашем случае - 57lgimm74385h9qi9dvrthkd47)
на скрипт: free.php методом пост Отправляй: 'email='+Edit1.text 'keystring='+Edit2.text Edit1 - вводишь E-mail Edit2 - Вводишь капчу PHPSESSID - Что это такое, читаем тут. Code: <img src="cp.php?PHPSESSID=57lgimm74385h9qi9dvrthkd47"> В данном случаи я думаю, она используется для получения capcha и дальшельшей проверки. Что бы получить сессию парси страницу, команды: Pos('PHPSESSID=',Page), Copy, Delete.
Вот нашел код один, который ищет в мемо введенное слово, и выделяет его: procedure TForm1.Button1Click(Sender: TObject); var // Объявляем переменные Find:string; // Искомая строка i:integer; // Счетчик для цикла begin find:=Edit1.Text; // Записываем в find текст из Edit For i:=0 to Memo1.Lines.Count-1 do // Запускаем цикл поиска строки If Pos(FIND, Memo1.Lines.Text)<>0 Then Begin Memo1.SetFocus(); Memo1.SelStart:=Pos(FIND,Memo1.Lines.Text)-1; Memo1.SelLength:=Length(FIND); End; end; Есть строка : <img src="cp.php?PHPSESSID=57lgimm74385h9qi9dvrthkd47"> в едит1 вводим : PHPSESSID= Нужно, чтобы в едит2 вышло : 57lgimm74385h9qi9dvrthkd47, т.е. до знаков ">
PHP: function ParserBlock( Page:string; const Param1, Param2:string):string; var BeginPos, EndPos:integer; TempPage:string; begin BeginPos:=AnsiPos(Param1,Page)+length(Param1); delete(Page,1,beginPos-1); BeginPos:=AnsiPos(Param1,Page)+length(Param1); EndPos:=AnsiPos(Param2,Page); Result:=copy(page,1,EndPos-1); end; Применять: PHP: str:='<img src="cp.php?PHPSESSID=57lgimm74385h9qi9dvrthkd47">'; edit2.Text:=ParserBlock(str,Edit1.text,'">');
Вот что пришло на GET запрос: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 WebMoney Advisor Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://terabit.ru/free.php Cookie: PHPSESSID=800fsde3g5jie4njrp6be4rs30 If-Modified-Since: Sat, 05 Sep 2009 13:42:34 GMT If-None-Match: "1f029b-318d-c9f8c680" Cache-Control: max-age=0 HTTP/1.x 304 Not Modified Date: Sun, 11 Apr 2010 15:40:07 GMT Server: Apache/2.2.3 (Red Hat) Connection: close Etag: "1f029b-318d-c9f8c680" Вот что отправилось на POST: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 WebMoney Advisor Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://terabit.ru/free.php Cookie: PHPSESSID=800fsde3g5jie4njrp6be4rs30 Content-Type: application/x-www-form-urlencoded Content-Length: 45 email=QAZ1aAA1WsX%40YahOo.com&keystring=8k4hd HTTP/1.x 200 OK Date: Sun, 11 Apr 2010 15:40:15 GMT Server: Apache/2.2.3 (Red Hat) X-Powered-By: PHP/5.2.10 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Length: 6886 Connection: close Content-Type: text/html; charset=windows-1251 Вот что я пытаюсь отправить через дельфи: procedure TForm1.Button1Click(Sender: TObject); var PageText: TStringList; PostData: TStringList; Http: TidHttp; CM: TidCookieManager; email, keystring: String; begin {Создаем объекты в памяти} Http:=TIdHTTP.Create(Self); PostData:=TStringList.Create; CM:=TidCookieManager.Create(Http); {Задаем нужные параметры} HTTP.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 WebMoney Advisor'; HTTP.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; HTTP.Request.AcceptLanguage:='ru,en-us;q=0.7,en;q=0.3'; HTTP.Request.AcceptEncoding:='gzip,deflate'; HTTP.Request.AcceptCharset:='windows-1251,utf-8;q=0.7,*;q=0.7'; HTTP.Request.Connection:='keep-alive'; HTTP.Request.Referer:='http://terabit.ru/free.php'; //А вот тут у меня судя по всему что то неправильно написано или все правильно? HTTP.Request.Cookie:='PHPSESSID=800fsde3g5jie4njrp6be4rs30'; //тут ID будет менятся HTTP.Request.Content-Type:='application/x-www-form-urlencoded'; HTTP.CookieManager:=CM; HTTP.AllowCookies:=True; HTTP.HandleRedirects:=True; А вот отправка запроса у меня правильная? {2. Формируем запрос} email:=edit1.text; keystring:=edit2.text; url:=edit6.text; PostData.Add('email&keystring'); PageText.Text:=HTTP.Post('url', PostData);
Тоесть Поле на сайте = текст. PHP: PostData.Add('email='+Edit1.text); PostData.Add('keystring='+Edit2.Text); то что в апострафах, одинарная ковычка (') считается текстом, поэтому убери вокруг Url. PHP: PageText.Text:=HTTP.Post(edit6.text, PostData); //или PageText.Text:=HTTP.Post(url, PostData); И в самом конце, чаще после перед end припиши ниже указаный код. PHP: // Не забываем освобождать. PostData.Free; P.s. Правильность заполнения запроса не смотрел. Голова не варит, а там еще в добавок много буковок.
Ошибку выдает HTTP.Request.Cookie:='PHPSESSID=800fsde3g5jie4njrp 6be4rs30'; Вот с этим куксом как поступать? Я его в url добавил.
1. Я давал тебе ссылку почитать, что такое сессия 2. Куки скорее всего будут выглядить так: HTTP.Request.Cookie:='MTI2NjU3NzYzN31MTsDfY5yMzE5OTI1MDA4NjU2Mzk3NDEwMTExsDU0NDUyNjAxNWExODQxYjkwMWQ1MmJkYTVhYzVjYTc1OGIyZmRjNzg1MGNkNTlmOWQ%3D'; Самый простой способ их посмотреть Опера>Сервис>Дополнительно>Управление Cookies... там вводишь сайт и выводится все, что тебе надо.