На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Проблема с авторизацией , Делаю POST, но потом мне говорят, что не залогинен
    Добрый день.

    У меня такая же проблемма. Методом POST логинюсь на сайт, далее GET получает страницу (проверяю вручную вставляю в оперу все ОК), в CppWebBrowser пытаюсь зайти на сайт говорит, что не залогинен.

    Может у кого какие нибудь идеи, что делать.

    Использую CodeGear 9, Windows 7. Indy 10.2.15

    Эта тема была разделена из темы "Проблема с авторизацией"
    Сообщение отредактировано: CodeMonkey -
      Мне кажется проблема у вас подобна той, к которой вы пытались ее приплести, только общей формулировкой "проблема с авторизацией".

      Цитата jimy @
      Методом POST логинюсь на сайт, далее GET получает страницу (проверяю вручную вставляю в оперу все ОК), в CppWebBrowser пытаюсь зайти на сайт говорит, что не залогинен.

      Может у кого какие нибудь идеи, что делать.

      Использую CodeGear 9, Windows 7. Indy 10.2.15

      Логин с помощью Indy, а загрузка CppWebBrowser... А с чего вы взяли что они используют общие cookie? По видимому, проблема именно в этом. Если так, то нужно каким-либо образом передать cookie, полученные Indy-компонентами, в CppWebBrowser.

      Кстати, а что в вашем случае, также как и в указанной в пером сообщении теме, целевой ресурс также находится в корпоративной сети и не имеет доступа извне? Если нет - то лучше было бы его озвучить, для тех кто заинтересуется проблемой.
        Нет ресурс это обычный сайт (merry-cherry.com). Я уже понял, что проблема заключается именно в кукисах. Только я не знаю как передать куки полученные idHttp в CppwebBrowser. IdCookieManager подключен. Вчера читал темы по куки + indy. Толком ничего не понял . Если кто распологает информацией, помогите плиз.
          Могу предложить такой вариант:
          ExpandedWrap disabled
            uses
              IdURI,
              MSHTML;
             
            function TForm1.MoveCookiesFromIdHttpToWebBrowser(IdHttp: TIdHTTP; WebBrowser: TWebBrowser;
                const ForURL: string; IsConnectionSecure: Boolean): Boolean;
            var
              CookieMan: TIdCookieManager;
              URI: TIdURI;
              IndyCookies: string;
              Doc:  IHTMLDocument2;
            begin
              Result := false;
              if ((IdHttp = nil) or (WebBrowser = nil)) then
                Exit;
              CookieMan := IdHTTP.CookieManager;
              if (CookieMan = nil) then
                Exit;
              URI := TIdURI.Create(ForURL);
              try
                IndyCookies := CookieMan.GenerateCookieList(URI, IsConnectionSecure);
              finally
                URI.Free();
              end;
              Doc := (WebBrowser1.Document as IHTMLDocument2);
              Doc.cookie := Doc.cookie + '; ' + IndyCookies;
              Result := true;
            end;
             
            procedure TForm1.Button1Click(Sender: TObject);
            begin
              //логин на основе IdHttp
             
              if (not MoveCookiesFromIdHttpToWebBrowser(IdHTTP1, WebBrowser1, 'http://www.merry-cherry.com/')) then
                ShowMessage('Шеф, все пропало! Все пропало!..'#13#10'Не могу перетащить печеньки :('#13#10 +
                    'Придется тебе самому авторизоваться в браузере...');
             
              //показ сайта через TWebBrowser
            end;

          Но не проверял, набросал в качестве предположения - так что может не работать.
            Как абсолютное ламо в этом вопросе: почему post для логина нельзя сделать самим WebBrowser-ом?
              К сожалению я тоже полное ламо :( . Вот нарыл в сети код. POST посылается самим CppWebBrowser. Страница логинится я залогинен :) , НО при нажатии на любую ссылку или кнопку меня выкидывает обратно и предлагает залогиниться снова :wall: :wall: :wall: . Что я не так делаю? Вот может кто-нибудь, что-то подскажет? Код внизу.

              ExpandedWrap disabled
                void __fastcall WebPostData(TCppWebBrowser *CppWebBrowser, String sURL, String sPostData)
                {
                    BSTR bstrHeaders = NULL;
                    TVariant vFlags = 0, vTargetFrameName=0, vPostData=0, vHeaders=0;
                    LPSAFEARRAY psa;
                    LPCTSTR cszPostData = sPostData.c_str();
                    UINT cElems = lstrlen(cszPostData);
                 
                    LPSTR pPostData;
                    LPVARIANT pvPostData;
                 
                    bstrHeaders = SysAllocString(L"Content-Type: application/x-www-form-urlencoded\r\n");
                 
                    if (!bstrHeaders){
                        Application->MessageBox(WideString ("Could not allocate bstrHeaders").c_bstr(), WideString("Warning").c_bstr(), MB_OK | MB_ICONWARNING);
                        return;
                    }
                 
                    V_VT(&vHeaders) = VT_BSTR;
                    V_BSTR(&vHeaders) = bstrHeaders;
                 
                    pvPostData = vPostData;
                 
                    if(pvPostData){
                        VariantInit(pvPostData);
                 
                        psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
                        if(!psa){
                            return;
                        }
                 
                        SafeArrayAccessData(psa, (LPVOID*)&pPostData);
                        memcpy(pPostData, cszPostData, cElems);
                 
                        SafeArrayUnaccessData(psa);
                 
                        V_VT(pvPostData) = VT_ARRAY | VT_UI1;
                        V_ARRAY(pvPostData) = psa;
                    }
                 
                    CppWebBrowser->Navigate((TVariant)sURL, &vFlags, &vTargetFrameName, &vPostData, &vHeaders);
                }
                 
                //-------------------------------------------------------------------------------------
                void __fastcall TForm2::Button1Click(TObject *Sender)
                {
                    String post_data="ID=login&Password=passcode";
                    WebPostData(WB,"http://www.merry-cherry.com/moderators/",post_data);
                }


              Завтра возьму бубен и попробую реализовать, что предложил arj99.

              M
              jimy, огромная просьба - в следующий раз оформлять код с соответствующей подсветкой и форматированием.
              arj99
              Сообщение отредактировано: arj99 -
                Сорри.

                А по теме попробовал твою мантру (см. пост от arj99 Сообщ. #4 ). Что то не работает, вылетает Access Violation (наверное у меня руки кривые).Придется еще и за напильником сбегать.
                  Цитата jimy @
                  попробовал твою мантру (см. пост от arj99 Сообщ. #4 ). Что то не работает, вылетает Access Violation (наверное у меня руки кривые)

                  Да с руками скорее всего все в порядке, я же сказал что проверил только синтаксис, т.е. это не решение вообще, а предположение. Хоть бы сказал где конкретно вылетает. А еще лучше соорудил бы тестовый проект, потому что приходится "в воздухе" предполагать перенос печеньев, а вот как конкретно ты авторизуешься я же не знаю... :-?
                    Если у тебя опыт есть,как думаешь почему меня выкидывает с сайта даже если я логинюсь POSTом через TCppWebBrowser? (см. пост #6).
                      Цитата jimy @
                      почему меня выкидывает с сайта даже если я логинюсь POSTом через TCppWebBrowser?

                      В этом предложении слишком мало данных. Единственное что могу предположить, так это отключенные cookie в IE :wacko: :unsure:
                      Тестовый проект все таки бы помог...
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0.0761 ]   [ 16 queries used ]   [ Generated: 13.09.26, 23:20 GMT ]