CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Logowanie przez IdHTTP

Logowanie przez IdHTTP

problemy z tworzeniem programów do obsługi sieci, internetu, e-mail itp..

Re: Logowanie przez IdHTTP

Nowy postprzez polymorphism » środa, 18 maja 2011, 21:48

Kodu nie podam, bo nic Ci on nie da. Pisałem go z wykorzystaniem klas, których po prostu nie masz, więc niewiele by wniósł. Jutro, jeśli będę pamiętał i będzie mi się chciało, pokombinuje z czystym COM-em.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2210
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 206
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows XPFirefox

Re: Logowanie przez IdHTTP

Nowy postprzez Darek_C++ » czwartek, 19 maja 2011, 08:53

Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: Logowanie przez IdHTTP

Nowy postprzez mckri » czwartek, 19 maja 2011, 22:30

To jest link, z którego miałem kod, podawany 3 posty wczesniej.
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
Podziękował : 10
Otrzymał podziękowań: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaOpera

Re: Logowanie przez IdHTTP

Nowy postprzez Cyfrowy Baron » piątek, 20 maja 2011, 07:33

Czy sprawdzałeś z wciśnięciem klawisza ENTER, jak podałem wcześniej???
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4730
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Logowanie przez IdHTTP

Nowy postprzez polymorphism » piątek, 20 maja 2011, 11:29

Jak obiecałem, tak robię. Masz tu (niezbyt piękny) kod, który loguje się na to forum:
KOD cpp:     UKRYJ  
IHTMLDocument2* doc;           

if(SUCCEEDED(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (void**)&doc)))
{
        IHTMLElementCollection* forms;
        IDispatch*                      disp;
        IHTMLFormElement*       form;

        if(SUCCEEDED(doc->get_forms(&forms)))
        {

                if(SUCCEEDED(forms->item(CVariant().toVARIANT(), CVariant(0).toVARIANT(), (IDispatch**)&disp)))
                {
                        IDispatch* user = NULL;
                        IDispatch* pass = NULL;
                        IDispatch* login = NULL;

                        disp->QueryInterface(IID_IHTMLFormElement, (void**)&form);

                        form->item(CVariant(L"username").toVARIANT(), CVariant().toVARIANT(), (IDispatch**)&user);
                        form->item(CVariant(L"password").toVARIANT(), CVariant().toVARIANT(), (IDispatch**)&pass);
                        form->item(CVariant(L"login").toVARIANT(), CVariant().toVARIANT(), (IDispatch**)&login);

                        if(user && pass && login)
                        {
                                IHTMLInputElement*      input1;
                                IHTMLElement*           input2;

                                user->QueryInterface(IID_IHTMLInputElement, (void**)&input1);
                                input1->put_value(CVariant(L"użytkownik").toVARIANT().bstrVal);
                                input1->Release();

                                pass->QueryInterface(IID_IHTMLInputElement, (void**)&input1);
                                input1->put_value(CVariant(L"hasło").toVARIANT().bstrVal);
                                input1->Release();

                                login->QueryInterface(IID_IHTMLElement, (void**)&input2);
                                input2->click();
                                input2->Release();
                        }

                        if(user) user->Release();
                        if(pass) pass->Release();
                        if(login) login->Release();
                        form->Release();
                }
                forms->Release();
        }

        doc->Release();
}
 

Dwie uwagi:
  • jak łatwo zauważyć, użyłem własnej klasy CVariant. Myślę, że nie powinno być problemu z zamianą jej na klasę TVariant.
  • Metoda IHTMLInputElement::put_value oczekuje stringa typu BSTR, a to nie jest zwykły unikodowy string. Dlatego w swoim kodzie użyłem klasy CVariant, ale tylko do konwersji wchat_t[] -> BSTR. Jeśli VCL-owy string ma jakąś metodę, która zwraca string tego typu, użyj go. W przeciwnym wypadku trzeba użyć odpowiednich funkcji WinAPI, nazw nie pamiętam ;)

    --- dodane ---

    WideString ma przeciążony operator konwersji dla BSTR, czyli powinno wystarczyć:
    KOD cpp:     UKRYJ  
    (BSTR)WideString(L"tralala")
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
mckri
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2210
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 206
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows XPFirefox

Re: Logowanie przez IdHTTP

Nowy postprzez Slynx » piątek, 20 maja 2011, 21:48

Jeśli to jest web browser, a z tego co mówicie to tak, to czemu się tak strasznie bawicie w jakieś nowe klasy, kombinacje, itp Web browser ma wbudowane metody. Sam wykorzystywałem to gdy logowałem się na stronę i potrzebowałem własnie kliknąć przycisk "loguj", a z tego co rozumiem, właśnie tego potrzebował autor (jeśli się mylę, to sorry, ale właśnie to zrozumiałem z ostatnich postów)
Kod jest z C++/cli, ale z przerobieniem nie powinno być żadnych problemów
KOD cpp:     UKRYJ  
        HtmlElementCollection ^ element_collection =  web_browser->Document->All;
                for each (HtmlElement ^ cur_elem in element_collection)
                {
                        if (cur_elem->GetAttribute("name") == "poczta_activate")
                                cur_elem->InvokeMember("click");
                        if (cur_elem->GetAttribute("id") == "kapcza")
                                cur_elem->SetAttribute("value", kapcza);
                        if (cur_elem->GetAttribute("class") == "submit-button")
                                cur_elem->InvokeMember("click");
                }
 

Jako, że nie miałem konkretnej nazwy przycisku, więc nie mogłem wyłapać, który to, to wyłapałem wszystkie elementy. Potem sprawdziłem po kolei, który ma wybrany atrybut, czyli logowanie i wywołanie odpowiedniego zdarzenia na tym elemencie (InvokeMember("click"))
Tu są przy okazji dwa inne przykłady, więc nie będę usuwał. Fragment kodu jest ze starego kreatora kont na wp.
W web_browser wszystko wyłapuje się przez Document->GetElmentByiD a potem wywołuje odpowiednie metody (ustawia atrybuty czy wywołuje zdarzenia)

... ale coś mam wrażenie, że wy nie o tym gadacie... choć o webBrowserze, ktoś wspomniał...
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Logowanie przez IdHTTP

Nowy postprzez polymorphism » piątek, 20 maja 2011, 22:20

Jeśli to jest web browser, a z tego co mówicie to tak, to czemu się tak strasznie bawicie w jakieś nowe klasy, kombinacje

Spróbuj zrobić to samo, tylko bez użycia klas .NET-owych, wtedy zobaczysz, dlaczego się tak strasznie bawimy ;)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2210
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 206
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows XPFirefox

Re: Logowanie przez IdHTTP

Nowy postprzez Slynx » sobota, 21 maja 2011, 11:16

Aha, czyli źle zrozumiałem. Czemu mnie to nie dziwi...

Ale widzisz... klasy NET-owe górą ; p
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Logowanie przez IdHTTP

Nowy postprzez polymorphism » sobota, 21 maja 2011, 11:44

Slynx napisał(a):Ale widzisz... klasy NET-owe górą ; p

Nie tyle .NET-owe, co jakiekolwiek klasy, które upraszczają kod i trzymają z daleka od korzystania bezpośrednio z COM-a.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2210
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 206
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows XPFirefox

Re: Logowanie przez IdHTTP

Nowy postprzez mckri » niedziela, 22 maja 2011, 21:43

Czy sprawdzałeś z wciśnięciem klawisza ENTER, jak podałem wcześniej???

Cyfrowy Baronie, nie sprawdzałem. Uznałem, że symulowanie kliknięcia przycisku myszki nie zadziała, gdyż z tego co na szybko sprawdziłem, po wprowadzeniu danych logowania do pól edycji, naciśnięcie klawisza enter na tym komponencie nie daje żadnego efektu. Przyznaję, że nie próbowałem tego rozgryzać dlaczego tak jest.

polymorphism, Twój kod (po przerobieniu dla builder'a) działa tak jak chciałem! Dzieki!
Avatar użytkownika
mckri
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): piątek, 15 sierpnia 2008, 13:48
Podziękował : 10
Otrzymał podziękowań: 2
System operacyjny: Windows Vista SP2
Kompilator: BCB 5/2007/2009
    Windows VistaOpera

Re: Logowanie przez IdHTTP

Nowy postprzez mate006 » piątek, 5 sierpnia 2011, 15:39

Ja mam pytanie odnośnie kodu polymorphism'a w jaki sposób dodać tekst do textarea, i jak wybrac odpowiednią opcję w checkbox?

Byłbym bardzo wdzięczny bo nie mogę sobie z tym poradzić
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 143
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    Windows 7Firefox

Re: Logowanie przez IdHTTP

Nowy postprzez polymorphism » piątek, 5 sierpnia 2011, 18:29

Za mało informacji podałeś.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2210
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 206
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows XPFirefox

Re: Logowanie przez IdHTTP

Nowy postprzez mate006 » piątek, 5 sierpnia 2011, 19:04

polymorphism napisał(a):Za mało informacji podałeś.


Poradziłem sobie z tym problemem, jednak mam inny problem, pisze sobie programik który wpisuje różne dane do mojego serwisu www. No i mam w nim pola typu radio <input type="radio" name="plec" value="woman"/> <input type="radio" name="plec" value="man"/> i moje pytanie brzmi jak zaznaczyć drugą wartość. bo udało mi się i zaznacza ale tylko pierwszą możliwość, oto ten kod:

KOD cpp:     UKRYJ  
IDispatch* radio = NULL;

form->item((TVariant)(L"plec"), (TVariant)0, (IDispatch**)&radio);

radio->QueryInterface(IID_IHTMLInputElement, (void**)&input1);
input1->put_checked(false);
input1->Release();
 


No i jeszcze jedną znalazłem uwagę, chodzi o to że jeśli wartość name elementu input jest w cudzysłowach ("") to wszystko ładnie chodzi, lecz jeśli jest w apostrofach ('') to wyskakuje błąd Access Violation ..., i chciałem się jeszcze spytać czy można to jakoś rozwiązać.
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 143
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    Windows 7Firefox

Re: Logowanie przez IdHTTP

Nowy postprzez polymorphism » piątek, 5 sierpnia 2011, 19:37

i moje pytanie brzmi jak zaznaczyć drugą wartość.

KOD cpp:     UKRYJ  
form->item((TVariant)(L"plec"), (TVariant)1, (IDispatch**)&radio);

A tak próbowałeś?

(...) lecz jeśli jest w apostrofach ('') to wyskakuje błąd Access Violation

Nie rozumiem, jak w apostrofach?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2210
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 206
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows XPFirefox

Re: Logowanie przez IdHTTP

Nowy postprzez mate006 » piątek, 5 sierpnia 2011, 20:01

(...) lecz jeśli jest w apostrofach ('') to wyskakuje błąd Access Violation
Nie rozumiem, jak w apostrofach?


Jedni piszą strony z użyciem apostrofów:
KOD cpp:     UKRYJ  
<input class='input' id='name' type='text' name='name' size='35' maxlength='50'  value='' />


a inni z użyciem cudzysłowów
KOD cpp:     UKRYJ  
<input class="input" id="name" type="text" name="name" size="35" maxlength="50"  value="" />


No i z apostrofami nie działa
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 143
Dołączył(a): wtorek, 2 marca 2010, 14:12
Podziękował : 7
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    Windows 7Firefox

Poprzednia stronaNastępna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje sieciowe

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 2 gości

cron