Проблема с авторизацией
, Делаю POST, но потом мне говорят, что не залогинен
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.138] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Проблема с авторизацией
, Делаю POST, но потом мне говорят, что не залогинен
|
Сообщ.
#1
,
|
|
|
|
Добрый день.
У меня такая же проблемма. Методом POST логинюсь на сайт, далее GET получает страницу (проверяю вручную вставляю в оперу все ОК), в CppWebBrowser пытаюсь зайти на сайт говорит, что не залогинен. Может у кого какие нибудь идеи, что делать. Использую CodeGear 9, Windows 7. Indy 10.2.15 Эта тема была разделена из темы "Проблема с авторизацией" |
|
Сообщ.
#2
,
|
|
|
|
Мне кажется проблема у вас подобна той, к которой вы пытались ее приплести, только общей формулировкой "проблема с авторизацией".
Цитата jimy @ Методом POST логинюсь на сайт, далее GET получает страницу (проверяю вручную вставляю в оперу все ОК), в CppWebBrowser пытаюсь зайти на сайт говорит, что не залогинен. Может у кого какие нибудь идеи, что делать. Использую CodeGear 9, Windows 7. Indy 10.2.15 Логин с помощью Indy, а загрузка CppWebBrowser... А с чего вы взяли что они используют общие cookie? По видимому, проблема именно в этом. Если так, то нужно каким-либо образом передать cookie, полученные Indy-компонентами, в CppWebBrowser. Кстати, а что в вашем случае, также как и в указанной в пером сообщении теме, целевой ресурс также находится в корпоративной сети и не имеет доступа извне? Если нет - то лучше было бы его озвучить, для тех кто заинтересуется проблемой. |
|
Сообщ.
#3
,
|
|
|
|
Нет ресурс это обычный сайт (merry-cherry.com). Я уже понял, что проблема заключается именно в кукисах. Только я не знаю как передать куки полученные idHttp в CppwebBrowser. IdCookieManager подключен. Вчера читал темы по куки + indy. Толком ничего не понял . Если кто распологает информацией, помогите плиз.
|
|
Сообщ.
#4
,
|
|
|
|
Могу предложить такой вариант:
![]() ![]() 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; Но не проверял, набросал в качестве предположения - так что может не работать. |
|
Сообщ.
#5
,
|
|
|
|
Как абсолютное ламо в этом вопросе: почему post для логина нельзя сделать самим WebBrowser-ом?
|
|
Сообщ.
#6
,
|
|
|
|
К сожалению я тоже полное ламо
. Вот нарыл в сети код. POST посылается самим CppWebBrowser. Страница логинится я залогинен , НО при нажатии на любую ссылку или кнопку меня выкидывает обратно и предлагает залогиниться снова . Что я не так делаю? Вот может кто-нибудь, что-то подскажет? Код внизу.![]() ![]() 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 |
|
Сообщ.
#7
,
|
|
|
|
Сорри.
А по теме попробовал твою мантру (см. пост от arj99 Сообщ. #4 ). Что то не работает, вылетает Access Violation (наверное у меня руки кривые).Придется еще и за напильником сбегать. |
|
Сообщ.
#8
,
|
|
|
|
Цитата jimy @ попробовал твою мантру (см. пост от arj99 Сообщ. #4 ). Что то не работает, вылетает Access Violation (наверное у меня руки кривые) Да с руками скорее всего все в порядке, я же сказал что проверил только синтаксис, т.е. это не решение вообще, а предположение. Хоть бы сказал где конкретно вылетает. А еще лучше соорудил бы тестовый проект, потому что приходится "в воздухе" предполагать перенос печеньев, а вот как конкретно ты авторизуешься я же не знаю... |
|
Сообщ.
#9
,
|
|
|
|
Если у тебя опыт есть,как думаешь почему меня выкидывает с сайта даже если я логинюсь POSTом через TCppWebBrowser? (см. пост #6).
|
|
Сообщ.
#10
,
|
|
|
|
Цитата jimy @ почему меня выкидывает с сайта даже если я логинюсь POSTом через TCppWebBrowser? В этом предложении слишком мало данных. Единственное что могу предположить, так это отключенные cookie в IE ![]() Тестовый проект все таки бы помог... |