уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Тяжеловатая была неделька. Семь дней в работы, постоянные напряги, всё что-то кому-то надо…жесть. Но все когда-то заканчивается (слава богу, неделя кончилась) и сегодня решил запостить в блог новую статейку. И решил сделать этот пост, опять же, адресным — ответ на комментарий.

Цель сегодняшней работы: авторизоваться на сайте по https-протоколу с использованием библиотеки Synapse.

Суть проблемы: не проходит авторизация при использовании метода HTTPMethod(), не устанавливаются новые cookies и т.д.

Целевой сайт:  https://partner.r01.ru

Чтобы пост был полезен и интересен не только одному человеку, то позволю себе рассмотреть всю работы подробно.

1. Изучаем процесс авторизации

Первое, что я сделал — зарегистрировался на «проблемном» сайте и изучил подробно все запросы и заголовки запросов при авторизации.

В качестве просмотрщика заголовков использовался плагин к FireFox «Live Headers».

Заголовок сообщения при авторизации методом POST выглядит следующим образом:

Ответ сервера при успешной авторизации:

При неудачной авторизации редирект (302) не происходит, несмотря на то, что cookies всё равно устанавливаются.

Таким образом, для того, чтобы авторизоваться на сайте с использованием Synapse нам необходимо:

  1. Сформировать и отправить по протоколу https запрос
  2. Определить в заголовке ответного сообщения либо редирект и перейти на новый адрес (при успешной регистрации) либо получить код 200 и констатировать провал «операции».

2. Век живи — век учись

Первое, с чего я начал работу с Synapse — это отправил на сервер get-запрос с целью получить необходимые cookies, предположив, что авторизация на сайте будет схожа по принципу со способом из этого поста. А кукисы-то и не пришли, несмотря на то, что вроде бы никаких видимых ошибок в работе Synapse замечено не было.

Порывшись немного по Интернету, нашел небольшое примечания к работе с https-протоколом в Synapse. Дело в том, что

для правильной работы с https помимо модуля httpsend, необходимо использовать также модуль ssl_openssl из той же библиотеки.

Вот так вот. Теперь попробуем пройти весь путь авторизации. Открываем Delphi и создаем новый проект. У меня на главной форме размещены следующие элементы:

  • 2 edit’а для воода логина и пароля;
  • button с ничего не говорящим названием «Login»
  • 2 Memo — в первый будем выводить все полученные кукисы и заголовки, а во второй — содержимое полученного документа после успешной авторизации.

Внешний вид программы у меня получился такой:

Может видок и неказистый, но, для тестов вполне достаточно.

Вначале приведу уже рабочий код обработчик события onClick кнопки — в нем мы отправляем запрос и проверяем прошла ли авторизация:

procedure TForm5.Button1Click(Sender: TObject);
 
function GetLocation(const headers:TStringList):string;
var i:integer;
begin
  for I := 0 to headers.Count - 1 do
    if pos('Location: ',headers[i])>0 then
        begin
          Result:=copy(headers[i],10,length(headers[i])-9);
          break;
        end;
end;
 
var stream: TStringStream;
httpsend: THTTPSend;
begin
  Memo1.Clear;
  Memo2.Clear;
  stream:=TStringStream.Create('');
  stream.WriteString('wizard_domain2=&auid=&htid=&;action=1&login='+Edit1.Text+'&passwd='+Edit2.Text);
  httpsend:=THTTPSend.Create;
  httpsend.MimeType:='application/x-www-form-urlencoded';
  httpsend.Document.LoadFromStream(stream);
  if httpsend.HTTPMethod('post','https://partner.r01.ru/?' ) then
    begin
      Memo2.Lines.Add('Отправка запроса. Ответ сервера');
      Memo2.Lines.Add('-----Cokies-----');
      Memo2.Lines.add(httpsend.Cookies.Text);
      Memo2.Lines.Add('-----Headers-----');
      Memo2.Lines.add(httpsend.Headers.Text);
      if httpsend.ResultCode=302 then
        begin
           if pos('/AB/about_abonent.khtml',GetLocation(httpsend.Headers))>0 then
             begin
               httpsend.Document.Clear;
               httpsend.Headers.Clear;
               httpsend.HTTPMethod('get','https://partner.r01.ru/AB/about_abonent.khtml');
               httpsend.Document.SaveToStream(stream);
               Memo1.Lines.Add(KOI8R2ANSI(stream.DataString));
             end
          else
            Memo1.Lines.Add('Авторизация не удалась')
         end
       else
         Memo1.Lines.Add('Авторизация не удалась')
    end;
end;

Обратите внимание на часть кода:

[...]
if pos('/AB/about_abonent.khtml',GetLocation(httpsend.Headers))>0 then
  begin
    httpsend.Document.Clear;
    httpsend.Headers.Clear;
    httpsend.HTTPMethod('get','https://partner.r01.ru/AB/about_abonent.khtml');
[...]

Всё дело в том, что при успешной авторизации редирект приходит на адрес:

/AB/about_abonent.khtml?regbase2_id=da…

и сколько раз я не пробовал получить документ по этому адресу — ничего не получилось. Поэтому поступил так «топорно» и всё сработало.

В ответном сообщении был получен документ содержащий html-код для страницы личного кабинета.

Ещё один «нестандартный» момент при работе с этим сайтом заключается в том, что страница приходит9 в кодировке KOI8-R и, следовательно, без дополнительной обработки текста мы получим вместо русского текста «кракозябры».

Для того, чтобы избежать неприятных моментов с русскими буквами я использовал вот такую нехитрую функции перекодирования текста из KOI8-R в ANSI:

function KOI8R2ANSI(S: string): string;
var
Ansi_CODE, KOI8_CODE: string;
i: integer;
begin
KOI8_CODE := 'бвчздецъйклмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС—Ј';
ANSI_CODE := 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ё';
Result := S;
for i := 1 to Length(Result) do
  if Pos(Result[i], KOI8_CODE) > 0 then
    Result[i] := ANSI_CODE[Pos(Result[i], KOI8_CODE)];
end;

Вот, пожалуй, и все, что касается авторизации на сайте https://partner.r01.ru.

P.S. Уважаемая,dkdk, надеюсь я не слишком опоздал с помощью и приведенный выше код Вам помог ;)

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
94 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
dkdk
dkdk
24/01/2010 23:53

Спасибо огромное)) помогло. Кстати, не поняла, почему у меня не срабатывало — ssl_openssl был подключен..
Теперь встал новый вопрос — скачивание файла))
https://partner.r01.ru/AB/auction2csv.khtml?ext=csv
должно происходить автоматическое скачивание файла. Пробую получать гетом этот адрес и делать http.document.savetofile..
причем и в случае, если сперва ходить на выдаваемый адрес (при этом 206 получаю, пытаюсь уже r01 снова идти, а дальше ничего). При этом откуда берется новая кука? Set-Cookie не было, а кука есть..
Заранее спасибо еще раз))

dkdk
dkdk
26/01/2010 21:58

HTTPGetFile — вообще не нашла (( GetBinary — ничего вообще не выдает..
про куки и 206 — это я тормоз, забыла кэш вычистить))
по идее httpsend.HTTPMethod(‘get’,’https://partner.r01.ru/AB/auction2csv.khtml’); должно в ответ 200 давать, а вообще ничего не дает. Пусто.  Не понимаю( Т.е. дело даже не в savetofile, а в самом гете..

Mihail
Mihail
27/01/2010 18:28

Здравствуйте! Приведенная здесь информация оказалась очень полезной! У меня возникла необходимо залогиниться на сайте ecod.ru работающему по протоколу https. Что вроде получилось не без вашего полезного примера)! Правда у данного сайта свои премудрости (при анализе заголовков при регистрации непосредственно из браузера не в одном из ответов сервера нет поля Location . Но перенаправление происходит, после трех Post запросов и двух Get. Все ответы сервера 200 ок!) Вроде я зарегился, но подозреваю о некорректности. Существует какой либо способ проверить цветут яблони на марсе или нет) по мимо заголовков сервера? Явных ошибок не выдает! Пытаюсь скачать файл. После регистрации делаю Get запрос… Подробнее »

dkdk
dkdk
27/01/2010 18:44

Mihail, а у Вас в гет запросе в явном виде файл указан? У меня просто сервер (r01.ru) вообще никакого ответа не выдает..
Я вот думаю, может у меня что-то с таймаутом, т.к. он и в браузере долго думает перед началом скачивания..
thx in advance)

Mihail
Mihail
27/01/2010 19:19

<!— /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:»»; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:»Times New Roman»; mso-fareast-font-family:»Times New Roman»;} code {font-family:»Courier New»; mso-ascii-font-family:»Courier New»; mso-fareast-font-family:»Times New Roman»; mso-hansi-font-family:»Courier New»; mso-bidi-font-family:»Courier New»;} @page Section1 {size:612.0pt 792.0pt; margin:2.0cm 42.5pt 2.0cm 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} —> /* Style Definitions */ table.MsoNormalTable {mso-style-name:»Обычная таблица»; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:»»; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:»Times New Roman»; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} Нет запрос содержит ссылку! Делаю вот таким макаром httpsend.HTTPMethod('get','https://ссылка'); Если по логике, ответ сервера идентичный как и через браузер, может synapse помещает его в системный буфер, тогда как его достать!… Подробнее »

dkdk
dkdk
27/01/2010 19:51

подозреваю, что искать ссылку с синапс также, как и без него  — делать поиск в получаемом документе по характерным особенностям ссылки. Т.е. после get
httpsend.document и в нем искать функцией pos необходимую ссылку)
А с закачкой файла у самой проблемы..)

Mihail
Mihail
28/01/2010 15:19

<!— /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:»»; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:»Times New Roman»; mso-fareast-font-family:»Times New Roman»;} code {font-family:»Courier New»; mso-ascii-font-family:»Courier New»; mso-fareast-font-family:»Times New Roman»; mso-hansi-font-family:»Courier New»; mso-bidi-font-family:»Courier New»;} @page Section1 {size:612.0pt 792.0pt; margin:2.0cm 42.5pt 2.0cm 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} —> /* Style Definitions */ table.MsoNormalTable {mso-style-name:»Обычная таблица»; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:»»; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:»Times New Roman»; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} Разобрался!) Делюсь опытом. Итак, изначально нам нужно найти ссылочку на наш файл! Для этого делаем Get Запрос на страничку содержащею ссылочку на файл! httpsend.HTTPMethod('get','https://ссылка'); Далее выгружаем результат запроса на жесткий… Подробнее »

Mihail
Mihail
29/01/2010 11:57

Vlad, Вам спасибо, за полезную статью, она дала правильное направление!)

Olegans
Olegans
01/02/2010 12:09

Уважаемый Vlad. Спасибо за статью! Очень помогла смог авторизоваться на HTTPS сайте используюя библиотеку Synapse. Теперь стоит задача закачать туда на HTTPS  файл. Пока только имею снятый при помощи Live Http headers образец как это делает обычный браузер. Не могу найти пример какие команды надо давать. Подскажите пожалуйста в каком направлении двигаться?

Rushan
Rushan
02/02/2010 00:31

Здравствуйте, Vlad и все посетители данного блога. Есть у меня задумка написать программу для работы с Яндекс-Деньгами. Пробую залогиниться по аналогии с вашим примером — не получается..: … stream := TStringStream.Create(»); stream.WriteString(‘retpath=http%3A%2F%2Fmoney.yandex.ru%2Fhistory.xml%3Fsys-req-id%3D51695425%26sha%3D1859bc1caec64a6f32418d05bdff6e9ea2701775&idkey=12t1265052585bMDTzoyBu&timestamp=1265051458854&login=<логин>&passwd=<пароль>&In=%D0%92%D0%BE%D0%B9%D1%82%D0%B8’); httpsend := THTTPSend.Create(); httpsend.MimeType := ‘application/x-www-form-urlencoded’; httpsend.Document.LoadFromStream(stream); if httpsend.HTTPMethod(‘post’, ‘https://passport.yandex.ru/passport?mode=auth&from=money&retpath=http%3A%2F%2Fmoney.yandex.ru%2Fhistory.xml%3Fsys-req-id%3D51695425%26sha%3D1859bc1caec64a6f32418d05bdff6e9ea2701775’) then begin … end; … а в ответ получаю: HTTP/1.1 302 Found Server: nginx Date: Mon, 01 Feb 2010 20:34:31 GMT Content-Type: text/plain; charset=utf-8 Connection: close Set-Cookie: yandex_mail=rushant; path=/; domain=.yandex.ru Set-Cookie: yandex_login=rushant; path=/; domain=.yandex.ru Set-Cookie: Session_id=1265056471.-5012146.0.16727186.2:123438673:350.8:1265056471740:1598965860:14.64210.7255.5f98480ecd70511da2d7940a9b74c3f2; path=/; domain=.yandex.ru Set-Cookie: L=elUAUmB3b0J4fEcKWl9uc3V2YV8HX3cHEE4bVCg2HlETDwwnLyYtRQooWHNDLAcYLRg/RSwJVzciWQYLTFtUcg==.1265056471.6657.230156.a25cf4c710f62878daceb99c5691e68b; path=/; domain=.yandex.ru; expires=Sunday, 02-May-10 20:34:31 GMT P3P: policyref=»/w3c/p3p.xml», CP=»NON DSP ADM DEV PSD IVDo OUR IND STP PHY… Подробнее »

Olegans
Olegans
02/02/2010 14:41

Спасибо Vlad за совет. Пытаюсь сделать закачку через функцию HttpPostFile. Правда не до конца понятны те переменные которые необходимо указать для этой функции. function HttpPostFile(const URL, FieldName, FileName: string;
const Data: TStream; const ResultData: TStrings): Boolean;
С( const URL, FieldName, FileName: string;) вроде все понятно а вот остальное (const Data: TStream; const ResultData: TStrings) не совсем понимаю с чем едят и что я должен указать для них

Steff
Steff
09/03/2010 13:15

Немного не в тему, поэтому прошу прощения заранее.
Недавно стояла задача NTLM авторизации. Побороть эту проблему на Delphi я не смог. Использовал сначала indy (с IdAuthenticationNTLM), потому по совету добрых людей попробовал synapse. Авторизация не поддалась :(
Опыта работы с http у меня практически нет. Не подскажите как реализауется в Delphi NTLM авторизация ? Может есть статьи на эту тему ? Примеры исходников ?
З.Ы. Проблему свою решил на C#. Но Delphi мне как-то ближе. Хотелось бы разобраться в проблеме до конца…

gert
gert
16/05/2010 16:06

спасибо !!!!!!

Vayrus
Vayrus
27/05/2010 10:18

Привет Влад, тут такая проблема, пытась залогиниться и создать тему на форуме средствами синапса, но что то не выходит, хотя говорит что все ОК, а потом Length Required, может подскажешь где ошибка? [code] function ParseErrors(ErrText: String): String; const A = ''; B = ''; C = ''; D = ''; begin if pos('login error', ErrText) 0 then begin Result := Trim(Copy(ErrText, pos(A, ErrText) + Length(A), Length(ErrText))); Result := Trim(Copy(Result, 1, pos(B, Result) - 1)); end else if pos('Ошибка', ErrText) 0 then begin Result := Trim(Copy(ErrText, pos(C, ErrText) + Length(C), Length(ErrText))); Result := Trim(Copy(Result, 1, pos(D, Result) - 1)); end else… Подробнее »

Vayrus
Vayrus
27/05/2010 16:03

Орал когда осуществлял выход, то есть:

[code]
LOG('Выход...');
//
if httpsend.HTTPMethod('get','http://talks.mark-itt.ru/forummisc/logout') then
begin
//
LOG(HTTPSend.ResultString + ' [' + IntToStr(HTTPSend.ResultCode) + ']');
//
if httpsend.HTTPMethod('get','http://talks.mark-itt.ru/forumindex') then
begin
//
LOG(HTTPSend.ResultString + ' [' + IntToStr(HTTPSend.ResultCode) + ']');
//
LOG('Выход осуществлен успешно');
end else
LOG('Неудачный выход (2)');
end else
LOG('Неудачный выход (1)');
[/code]

Vayrus
Vayrus
27/05/2010 16:05

Подозреваю что ошибка кроется опять в куках (неправильная кодировка, нехватка данных) или из-за редиректов

Vayrus
Vayrus
27/05/2010 19:33

Ну я понял, что допустил данную ошибку, но постинга все равно не происходит, несмотря на то что со «слов» синапса все в порядке, а мой код показывает «Другие ошибки постинга»… Может я допустил все таки какую то грубую ошибку при работе с синапсом и koi8-r

Vayrus
Vayrus
27/05/2010 19:45

Кстати ошибка постинга возвращает страничку с каракулями, но это понятно, только не понятно почему именно саму страницу постинга

nmd
nmd
22/06/2010 18:42

не получается авторизироваться на гугле(((

nmd
nmd
24/06/2010 19:22

компонент это хорошо конечно, но я хотел бы сам еще посмотреть как все там реализовано на простом примере
но от ссылки не откажусь))

nmd
nmd
25/06/2010 14:00

спасибо Vlad! и еще вопрос по wininet, какую литературу читали и где ее можно посмотреть? названия книг приветствуются хотелось бы на родном языке!

blubssnisee
blubssnisee
23/07/2010 23:13

Регистрируюсь на форуме.

castrol
castrol
07/09/2010 18:47

Сейчас стоит задача авторизации на сайте. Пробовал разобраться в этом примере, но у меня при запуске только мемо чистятся а дальше ничего не происходит., Вот код unit Unit11111; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, httpsend; type TForm1 = class(TForm) pnl1: TPanel; edit3: TEdit; edit1: TEdit; edit2: TEdit; Memo1: TMemo; btn1: TButton; lbl1: TLabel; lbl2: TLabel; lbl3: TLabel; Memo2: TMemo; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; function KOI8R2ANSI(S: string): string; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); function GetLocation(const headers:TStringList):string; var i:integer; begin for… Подробнее »

Genniy
Genniy
17/09/2010 13:56

Vlad, вы так много знаете о synapse. Не могли бы вы подсказать как решить проблему.
Мне могу получить ни GET ни POST, когда работаю с https. Библиотеку SSL_OpenSSL подключаю. Не могу работать с тем узлом в котором при заходе через браузер пишет «Ошибка в сертификате безопасности этого web-узла». Можно ли как-то обойти эту проверку?
Спасибо!

Илья
Илья
01/11/2010 16:09

Content-Length: 87
_token=986d975ddf8e1ebc6077c10781b355dd&_action=login&_timezone=2&_url=&_user=логин&_pass=пароль
 
Что есть token?…
 
 

Vladimir
22/11/2010 00:21

Как выяснилось, для корректной работы с Https , помимо прописывания в Uses  httpsend и ssl_openssl, в папку проекта надо еще положить две dll-библиотеки — libeay32.dll и ssleay32.dll. Без них моя программа не хотела логиниться на https-сайте. ПОсле того, как положил их в папку, все заработало.

Илья
Илья
22/11/2010 22:04

Ура! я сделал авторизацию на сайте электронных денег)
Только вот проблема. Русские буквы передаются как %CA%EE%F5%E0%ED , можно как-то автоматизировать перевод из букв в «это», для последующей отсылки?

Руслан
Руслан
23/07/2011 13:35

Скиньте исходник плиз!

Ildar
Ildar
08/08/2011 21:57

Здарствуйте! Я только наичнаю програмировать на delphi и у меня почему то не получаеться авторизоваться get запросом на  http://cfire.mail.ru Я больше чем уверен что дело в какой то маленькой ошибке но никак понять не могу, помогите пожалуйста  [code]procedure TForm1.Button1Click(Sender: TObject); function GetLocation(const headers:TStringList):string; var i:integer; begin for I := 0 to headers.Count - 1 do if pos('Location: ',headers[i])>0 then begin Result:=copy(headers[i],10,length(headers[i])-9); break; end; end; var stream: TStringStream; httpsend: THTTPSend; begin Memo1.Clear; Memo2.Clear; stream:=TStringStream.Create(''); stream.WriteString('login='+Edit1.Text+'&password='+ Edit2.text+'&submit=%C2%EE%E9%F2%E8&remember='); httpsend:=THTTPSend.Create; httpsend.MimeType:='application/x-www-form-urlencoded'; httpsend.Document.LoadFromStream(stream); if httpsend.HTTPMethod('post','http://cfire.mail.ru/' ) then begin Memo2.Lines.Add('Отправка запроса. Ответ сервера'); Memo2.Lines.Add('-----Cokies-----'); Memo2.Lines.add(httpsend.Cookies.Text); Memo2.Lines.Add('-----Headers-----'); Memo2.Lines.add(httpsend.Headers.Text); if httpsend.ResultCode=302 then begin if pos('/account/',GetLocation(httpsend.Headers))>0 then begin httpsend.Document.Clear;… Подробнее »

skeptik
skeptik
02/10/2011 05:29

Доброго времени суток!
Сразу к делу..
Имеется статистика провайдера, соответственно https.
Проблема заключается в том что не могу посмотреть Content-Length.
Пробовал в «Live Headers», «HTTP Analyzer«.
Может есть какой-то иной способ просмотра посылаемых заголовков?

skeptik
skeptik
02/10/2011 19:07

Vlad, т.е. я так понял какие нужно передавать параметры мне не узнать.
Эх, а такая идея была!!
Спасибо, что так быстро ответили !

Dimrix
Dimrix
29/10/2011 00:11

Подскажите как должен выглядеть запрос в моем случае: необходимо авторизироваться на данном сайте https://assa.intertelecom.ua/ru/login
stream.WriteString(‘&phone=’+Edit1.Text+’&pass=’+Edit2.Text);
httpsend:=THTTPSend.Create;
httpsend.MimeType:=’application/x-www-form-urlencoded’;
httpsend.Document.LoadFromStream(stream);
if httpsend.HTTPMethod(‘post’,’https://assa.intertelecom.ua/ru/login’ ) then
но   httpsend.HTTPMethod возвращает ложь и естествеено ничего не получается…  
Где моя ошибка не подскажите?

Dimrix
Dimrix
29/10/2011 00:48

Считал заголовки нашёл ошибку, изменил запрос на
  stream.WriteString(‘phone=ххх&pass=ууу&ref_link=»https://assa.intertelecom.ua/ru/statistic»&js=1’);

но проблема осталась

Dimrix
Dimrix
29/10/2011 02:05

Дык в запросе присутствуют лишь латинские символы и цифры… Они в любой кодировке вроде бы остаются сами собой… Или нет?

Dimrix
Dimrix
29/10/2011 02:11

Кстати, код ошибки httpsend.ResultCode=500
 

Dimrix
Dimrix
29/10/2011 02:19

ну а сам код страницы следующий:
[code] <form method="post" class="assa_form" action="https://assa.intertelecom.ua/ru/login"> <label for="phone" id="phone_label"> <strong>Номер телефона:</strong> <input style="width:110px" type="text" id="phone" name="phone" size="15" maxlength="10" value="" /> </label> <label for="password" id="password_label"> <strong>Пароль:</strong> <input style="width:110px" type="password" id="password" name="pass" size="15" maxlength="14" value="" /> </label> <input type="submit" class="submit" value="Вход" onclick="checkLoginForm(this.form); return false;" /> <input type="hidden" name="ref_link" value="https://assa.intertelecom.ua/ru/login"/> <script type="text/javascript"> //<![CDATA[ document.write('<input type="hidden" name="js" value="1" />'); //]]> </script> </form>
[/code]

Dimrix
Dimrix
29/10/2011 02:29

Бред, но когда убрал из строки адресс букву с (не https:// a http://) Авторизация как я понимаю проходит. Теперь буду разбираться как считывать параметры…

Dimrix
Dimrix
29/10/2011 03:39

Фишка заключается именно в том, что я подключил модуль (объявил его в юнитах), но результата не было. Ответ который я получаю с кодом 301 как раз тот, что высылается при положительной авторизации, ибо в противном случае должен получать код 200.
ЗЫ: Так не охота рыться в процедурах, не подскажете как (если можно с примерами) мне считать необходимые данные со страницы, пусть даже весь код страницы, а там я уже сам сделаю выборку нужных мне данных.

Dimrix
Dimrix
29/10/2011 04:33

Факир был пьян и фокус не удался — нашёл баг — добавить то в юниты я не забыл, а вот длл положить в папочку забыл, и модель не работал. Только вложил длл сразу документ полностю скачался. Дальше дело техники. Всем спасибо :)
ЗЫ: при успользовании модуля ssl_openssl не забывайте доложить длл-ки ибо без них дела не будет!

Steff
Steff
30/11/2011 01:09

Привет, Влад.

  Может поможешь «распутать» еще одну авторизацию ?
  Пытаюсь авторизоваться в интернет банке связного: https://ibank.svyaznoybank.ru/lite/app/pub/Login
  httpsend.HTTPMethod(‘post’,’https://ibank.svyaznoybank.ru/lite/app/pub/Login’);
  получаю: 400 Bad Request. Your browser sent a request that this server could not understand
  SSL инициализирован корректно (SSLImplementation типа TSSLOpenSSL). В чем может быть проблема ?

  Пробовал через indy. Код страницы замечательно скачивается, парсится, но после перенаправления  получаю не ту страницу. Видимо корректные куки отправить не получается :(
  Хотел бы получить тот же результат через synapse, может здесь с куками проблем не будет… 

Steff
Steff
30/11/2011 11:00

Все на месте. Я изучил все твои статьи по synapse (кстати огромное спасибо тебе за твою работу)
В том то и дело что я изначально думал на synapse сделать задачу, но первую же страничку скачать не смог. Потом решил проверить на indy. С indy получилось, но не все :(

steff
steff
02/12/2011 00:50

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

Дмитрий
Дмитрий
19/12/2011 18:36

Влад,  если не трудно, прдскажите, что в Synapse является аналогом   BasicAuthentification, который пристутсnвует в Indy?  То есть как корректно подключаться через proxy с использованием basicAuthentification?

Дмитрий
Дмитрий
19/12/2011 19:15

ОК, спасибо, гляну

Александр
Александр
20/03/2012 11:57

Подскажите как скачать файл. Есть сайт https://……. авторизоваться у меня получилось, код страницы, на которой лежит файл тоже могу получить в memo. ссылка на файл выглядит как
https://www.xxxxxx.org/perl/dl.pl?ID=107.
 

Александр
Александр
20/03/2012 17:19

Vlad, а как отлавливать? я нажимаю на ссылку ( через браузер) далее открываю просмотрощик HTML заголовков, он мне пишет следующие:

https://www.space-track.org/perl/dl.pl?ID=107
GET /perl/dl.pl?ID=107 HTTP/1.1
Host: http://www.space-track.org
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: https://www.space-track.org/perl/bulk_files.pl    // на этой странице файл
Cookie: spacetrack_session=Dirl_10473123_1332248933-37bdfc4b64c61dcbd22bbe005b6514e8

HTTP/1.1 200 OK
Date: Tue, 20 Mar 2012 11:09:26 GMT
Server: Apache
Content-Disposition: attachment; filename=alldata_2012_079.zip
Content-Description: Larry’s File Downloader 0.2
Content-Length: 809682
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: application/x-gzip

поле Location нет. Или как-то иначе нужно его находить?
 

Шушпанчик
Шушпанчик
09/04/2012 13:20

Попытался использовать статью об авторизации в социальных закладках и вышеприведенную статью для авторизации на форуме, основанном на движке phpBB — ничего не получается. Дело в том, что форумный движок постоянно генерирует SID`ы, и совершенно непонятно, как отследить, какой именно SID вам присваивается в данный момент, так как у залогиненного и разлогиненного пользователей эти SID`ы абсолютно разные.
Сколько я не пытался посылать запросы с помощью POST и считывать оттуда SID, последующий GET показывает, что SID не меняется, а следовательно авторизация так и не произошла.
Уважаемый автор статей, как бы мне с вами связаться и поговорить об этом подробнее?