PDA

Просмотр полной версии : l2top_vote своими руками [Delphi]


Ss[x]dD
10.04.2010, 22:59
Вот код на получение капчи

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 искал что куда, пытался разобраться как, вобщем не получилось.

mailbrush
11.04.2010, 00:13
antigate.com

JnK
11.04.2010, 02:26
Открываешь страницу, где просят ввести ник и капчу,
Исходный код, находишь <form ....
и выбираешь action= .... // на какой скрипт отправляется форма
input name="..." // тут смотришь имя, которая отвечает за капчу и ник, делаешь связку и отправляешь.

P.s. и зачем плодить темы, Создал одну в ней бы и писал.

Ss[x]dD
11.04.2010, 19:56
Имеется вот такая строчка 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)

JnK
11.04.2010, 21:11
на скрипт: free.php методом пост
Отправляй:
'email='+Edit1.text
'keystring='+Edit2.text

Edit1 - вводишь E-mail
Edit2 - Вводишь капчу

PHPSESSID - Что это такое, читаем тут. (http://www.phpfaq.ru/session)

<img src="cp.php?PHPSESSID=57lgimm74385h9qi9dvrthkd47">

В данном случаи я думаю, она используется для получения capcha и дальшельшей проверки.

Что бы получить сессию парси страницу, команды:
Pos('PHPSESSID=',Page), Copy, Delete.

Ss[x]dD
12.04.2010, 20:01
Вот нашел код один, который ищет в мемо введенное слово, и выделяет его:

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, т.е. до знаков ">

JnK
12.04.2010, 21:58
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;

Применять:

str:='<img src="cp.php?PHPSESSID=57lgimm74385h9qi9dvrthkd47">';
edit2.Text:=ParserBlock(str,Edit1.text,'">');

Ss[x]dD
12.04.2010, 23:07
Вот что пришло на 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=800fsde3g5jie4njrp 6be4rs30'; //тут 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);

JnK
12.04.2010, 23:41
dD']
....
{2. Формируем запрос}
email:=edit1.text;
keystring:=edit2.text;
url:=edit6.text;
PostData.Add('email&keystring');

PageText.Text:=HTTP.Post('url', PostData);

Тоесть Поле на сайте = текст.

PostData.Add('email='+Edit1.text);
PostData.Add('keystring='+Edit2.Text);

то что в апострафах, одинарная ковычка (') считается текстом, поэтому убери вокруг Url.

PageText.Text:=HTTP.Post(edit6.text, PostData);
//или
PageText.Text:=HTTP.Post(url, PostData);

И в самом конце, чаще после перед end припиши ниже указаный код.

// Не забываем освобождать.
PostData.Free;


P.s. Правильность заполнения запроса не смотрел. Голова не варит, а там еще в добавок много буковок.

Ss[x]dD
13.04.2010, 00:05
Ошибку выдает :(
HTTP.Request.Cookie:='PHPSESSID=800fsde3g5jie4njrp 6be4rs30';

Вот с этим куксом как поступать? Я его в url добавил.

JnK
13.04.2010, 20:29
1. Я давал тебе ссылку почитать, что такое сессия
2. Куки скорее всего будут выглядить так:
HTTP.Request.Cookie:='MTI2NjU3NzYzN31MTsDfY5yMzE5O TI1MDA4NjU2Mzk3NDEwMTExsDU0NDUyNjAxNWExODQxYjkwMWQ 1MmJkYTVhYzVjYTc1OGIyZmRjNzg1MGNkNTlmOWQ%3D';
Самый простой способ их посмотреть Опера>Сервис>Дополнительно>Управление Cookies... там вводишь сайт и выводится все, что тебе надо.