CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Rejstrowanie na https za pomoca WinInet

Rejstrowanie na https za pomoca WinInet

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

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez politech » środa, 28 lipca 2010, 21:25

Kolejne pytanie po zalogowaniu na konto chciałbym dalej działać na stronach to musze je otrzymac jakos InternetReadFilem czy jakos inaczej to wykonac?
Avatar użytkownika
politech
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): poniedziałek, 26 lipca 2010, 13:21
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2006
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez polymorphism » środa, 28 lipca 2010, 21:56

Tylko zanim zaczniesz jest czytać tą funkcją, musisz wysłać zapytanie do serwera (HttpOpenRequest/HttpSendRequest). W sumie czytanie będzie wyglądać tak, jak pokazałem to w kodzie, który podałem wcześniej.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez politech » środa, 28 lipca 2010, 22:07

Wiem wiem ale czytalem że wininet ma jaks baze cookisow i teraz nie wiem czy mam pobierac te cookisy z tej bazy jakos i wysylac nastepny naglowek z pobranym cookis czy jakos inaczej to rozwiazac?

Edit: a czy InternetReadFile w buforze po wykonaniu przetrzymuej adres strony ktory został zwrocony?
Avatar użytkownika
politech
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): poniedziałek, 26 lipca 2010, 13:21
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2006
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez polymorphism » środa, 28 lipca 2010, 22:23

(...) i teraz nie wiem czy mam pobierac te cookisy z tej bazy jakos i wysylac nastepny naglowek z pobranym cookis czy jakos inaczej to rozwiazac?

Te cookisy to po polsku ciasteczka ;) Ale wracając: sprawdzałeś czy to działa? Podejrzewam, że cała wymiana ciastek odbywa się automatycznie, więc nie musisz nic robić.

a czy InternetReadFile w buforze po wykonaniu przetrzymuej adres strony ktory został zwrocony?

Nie. Funkcja ta czyta zawartość strony, a nie jej adres.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez politech » środa, 28 lipca 2010, 22:31

Nie testowalem bo nie wiem co jeszcze- myślałem na początku ze InternetReadFile zwroci mi adres strony na której mam dalej działać(tzn z która się trzeba połączyć,wysłąc POSTA itd) a z tego co psizesz to tak nie działa więc jak odbire zawartość strony i co kolejne InternetConnect z ta sama strona gdzie w nowym HttpOpenRequest podaje druga czesc headera jako podstronke jzu po zalogowaniu?
Avatar użytkownika
politech
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): poniedziałek, 26 lipca 2010, 13:21
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2006
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez polymorphism » środa, 28 lipca 2010, 23:01

tzn z która się trzeba połączyć,wysłąc POSTA itd

No przecież w kodzie, który podałem wcześniej, odbieram stronę, która jest odpowiedzią na POSTa! Zawartość oczywiście nie jest nigdzie zapisywana, bo nie to było istotą problemu. Analizuj kody, które dostajesz.

(...) i co kolejne InternetConnect (...)

Z tego co wyczytałem w dokumentacji, InternetConnect tworzy sesję HTTP, więc przy wszelkiego rodzaju logowaniach powinieneś trzymać się jednej sesji. W przeciwnym wypadku będziesz/możesz być widziany przez serwer jako niezalogowany użytkownik.

I zacznij używać interpunkcji, bo czyta się ciężko.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez politech » czwartek, 29 lipca 2010, 15:25

No przecież w kodzie, który podałem wcześniej, odbieram stronę, która jest odpowiedzią na POSTa!

Problem w tym, że nie wiem jak mam zareagować na to odebranie, bo ok mam zawartość strony w buforze i z tego co testowałem nie jestem z nią połączony(tzn jeśli po odebraniu wyslę SendReqest, bez OpenReqest to pomimo tego , że wykonuje się wszystko łądnie podczas debugowania to nowy POST, który wysyłam, nie wykonuje się) czyli rozumiem, że powinienem zrobic OpenReqest zgodnie z tym co odebralem ale w samej zawartości strony nie występuje jej adres, więc nie wiem jak wybrać parametry dla OpenReq

Edit: a może trzeba zrealziowac to za pomocą SendReqestEx? POnieważ chciałbym wysłać 5x POST z ktorych kazdy nastepny potrzebuje działania poprzednich
Avatar użytkownika
politech
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): poniedziałek, 26 lipca 2010, 13:21
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2006
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez polymorphism » czwartek, 29 lipca 2010, 16:41

(...) czyli rozumiem, że powinienem zrobic OpenReqest zgodnie z tym co odebralem ale w samej zawartości strony nie występuje jej adres

Ja zupełnie nie wiem, co Ty chcesz zrobić. Jaki znowu adres?!

HttpOpenRequest tworzy zapytanie, zatem jeśli chcesz wysłać nowe, wpierw musisz wywołać tę funkcję.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez politech » czwartek, 29 lipca 2010, 20:16

KOD cpp:     UKRYJ  
handle1 = InternetOpen(agent, 0, NULL, NULL, 0);

handle2 = InternetConnect(handle1, "secure.tibia.com", INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);

handle3 = HttpOpenRequest(handle2, "POST", "/account/?subtopic=accountmanagement", NULL, NULL, 0, INTERNET_FLAG_SECURE,0);

if(HttpSendRequest(handle3,
                "Content-Type: application/x-www-form-urlencoded\r\n",
                -1,
                (LPVOID)log,
                strlen(log) + 1) == TRUE)

        {  //
        char    buff[2000];
        DWORD   cblen = 2000;

        if(HttpQueryInfo(handle3,HTTP_QUERY_STATUS_CODE,buff,&cblen,NULL) == TRUE && buff[0] == '2')
                 {
                 DWORD   cont_len = -1;
                 cblen = 2000;
                 if(HttpQueryInfo(handle3,HTTP_QUERY_CONTENT_LENGTH,buff,&cblen,NULL) == TRUE)
                 {
                        sscanf(buff,"%u",&cont_len);
                 }


                while(InternetReadFile(handle3,buff,min<DWORD>(2000,cont_len),&cblen) == TRUE && cblen > 0)
                {  //
                        cont_len -= cblen;
                }  //
                Form1->Memo1->Text=buff;
                 int k=GetLastError();
                if(k == 0)
                {
                handle4 = HttpOpenRequest(handle2, "POST","/account/?subtopic=accountmanagement", NULL, NULL, 0, INTERNET_FLAG_SECURE,0);
                if(HttpSendRequest(handle4,
                "Content-Type: application/x-www-form-urlencoded\r\n",
                -1,
                (LPVOID)zm_hasla,
                strlen(zm_hasla) + 1) == TRUE)
                {//
                         char    buff[2000];
                         DWORD   cblen = 2000;

                         if(HttpQueryInfo(handle3,HTTP_QUERY_STATUS_CODE,buff,&cblen,NULL) == TRUE && buff[0] == '2')
                         {
                          DWORD   cont_len = -1;
                         cblen = 2000;
                         if(HttpQueryInfo(handle3,HTTP_QUERY_CONTENT_LENGTH,buff,&cblen,NULL) == TRUE)
                           {
                        sscanf(buff,"%u",&cont_len);
                          }


                          while(InternetReadFile(handle3,buff,min<DWORD>(2000,cont_len),&cblen) == TRUE && cblen > 0)
                          {
                        cont_len -= cblen;
                          }
                           Form1->Memo1->Text=buff;
                           int pi=GetLastError();
                         if(pi == 0)
                                 {
                                 handle5 = HttpOpenRequest(handle2, "POST", "/account/?subtopic=accountmanagement&page=changepassword", NULL, NULL, 0, INTERNET_FLAG_SECURE,0);
                             if(    (HttpSendRequest(handle5,
                                 "Content-Type: application/x-www-form-urlencoded\r\n",
                                  -1,
                                  (LPVOID)zat_zmiane,
                                  strlen(zat_zmiane) + 1))==TRUE){
                 int pi2=GetLastError();//pi2=2 czyli tak jakbym podawal zly dodatkowy header!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                  char    buff[2000];
                         DWORD   cblen = 2000;

                         if(HttpQueryInfo(handle5,HTTP_QUERY_STATUS_CODE,buff,&cblen,NULL) == TRUE && buff[0] == '2')
                         {
                          DWORD   cont_len = -1;
                         cblen = 2000;
                         if(HttpQueryInfo(handle5,HTTP_QUERY_CONTENT_LENGTH,buff,&cblen,NULL) == TRUE)
                           {
                        sscanf(buff,"%u",&cont_len);
                          }


                          while(InternetReadFile(handle5,buff,min<DWORD>(2000,cont_len),&cblen) == TRUE && cblen > 0)
                          {
                        cont_len -= cblen;
                          }
                        Form1->Memo1->Text=buff;
                         }
                         }
                         }
                }
         }
}
}
}
InternetCloseHandle(handle1);
InternetCloseHandle(handle2);
InternetCloseHandle(handle3);
InternetCloseHandle(handle4);
InternetCloseHandle(handle5);



Możecie znalizować i wskazać błąd? NIestety nie udało mi sie koloru usatwić wiec !!!!!!!!!!!!!!!!!!!!!!!-> oznaczenie linijki w ktorej getlasterror daje mi 2
Avatar użytkownika
politech
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): poniedziałek, 26 lipca 2010, 13:21
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2006
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez polymorphism » czwartek, 29 lipca 2010, 21:22

DAMN! :shock: A o funkcjach słyszał?! Trzy razy powtarzasz ten sam kawałek kodu.



KOD cpp:     UKRYJ  
while(InternetReadFile(handle3,buff,min<DWORD>(2000,cont_len),&cblen) == TRUE && cblen > 0)
{
        cont_len -= cblen;
}
               
Form1->Memo1->Text=buff;

To jest bardzo naiwne, w zasadzie nie działa tak jak trzeba. Ta pętla czyta stronę fragmentami, po 2000 bajtów. Przypisanie buff do memo jest przypisaniem ostatniego fragmentu. Już pomijam fakt, że nikt nie powiedział, że buff zawiera tekst zakończony zerem.

Jeśli już, to na przykład tak:
KOD cpp:     UKRYJ  
string page;   
       
while(InternetReadFile(handle3,buff,min<DWORD>(2000,cont_len),&cblen) == TRUE && cblen > 0)
{
        page.append(buff,buff + cblen);
        cont_len -= cblen;
}

Form1->Memo1->Text = page.c_str();


KOD cpp:     UKRYJ  
if((HttpSendRequest(...) == TRUE)
{
        int pi2 = GetLastError();//pi2=2 czyli tak jakbym podawal zly dodatkowy header!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       
        (...)

W sumie jeśli program doszedł to tego miejsca, to powinno być ok, wszak HttpSendRequest zwróciła TRUE.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez politech » czwartek, 29 lipca 2010, 21:27

DAMN! :shock: A o funkcjach słyszał?! Trzy razy powtarzasz ten sam kawałek kodu.

To jedna z kilku wersji kodu, który ma za zadanie wykonać prawidłowo dana rzecz poźniej z tego będzie robiony program

Przypisanie Buff do memo mowi mi czy wykonało się poprawnie all(w meme wyświetli się 200) czy nie(w memo tekst odpowiedz)

W sumie jeśli program doszedł to tego miejsca, to powinno być ok, wszak HttpSendRequest zwróciła TRUE.

No właśnie a zmiana hasła nie następuje
Avatar użytkownika
politech
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): poniedziałek, 26 lipca 2010, 13:21
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2006
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez faranek22 » czwartek, 29 lipca 2010, 21:31

z certyfikatem ssl zawsze miałem problem....
Avatar użytkownika
faranek22
Bladawiec
Bladawiec
 
Posty: 1
Dołączył(a): czwartek, 29 lipca 2010, 17:35
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
Gadu Gadu: 0
    LinuxFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez polymorphism » czwartek, 29 lipca 2010, 21:37

To jedna z kilku wersji kodu (...)

Tylko później szukaj błędów w czymś takim...

No właśnie a zmiana hasła nie następuje

No ale wygląda na to, że nie jest to wina kodu, tylko tego, co wysyłasz.


---- dodane ----

Tak sobie myślę, że odczyt powinien wyglądać tak:
KOD cpp:     UKRYJ  
BOOL res;

while((res = InternetReadFile(handle3,buff,min<DWORD>(2000,cont_len),&cblen)) == TRUE && cblen > 0)
{
        (...)
}

// to zamiast if(GetLastError() == 0)
if(res == TRUE && cblen == 0)
{
        /* odczyt zakończony poprawnie */
}
Ostatnio edytowano czwartek, 29 lipca 2010, 21:47 przez polymorphism, łącznie edytowano 2 razy
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez politech » czwartek, 29 lipca 2010, 21:41

No to zabieram się do analizowania POST'ow z Live HTTP Header
Avatar użytkownika
politech
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): poniedziałek, 26 lipca 2010, 13:21
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2006
Gadu Gadu: 0
    Windows XPFirefox

Re: Rejstrowanie na https za pomoca WinInet

Nowy postprzez politech » poniedziałek, 2 sierpnia 2010, 17:25

Wiecie może jak sciąągnąć tekst, ktory wyświetla mi strona? Tzn. po zalogowaniu na stronie klikam, na suggest name(co generuje odpowiedniego GET) i wyświetlane są sugerowane imiona postaci(wybranie imienia i zatwierdzenie generuje posta w którym dane imie wystepuje wiec nie da sie tego obejsc), a ja chciałbym to odczytać i nie wiem jak. Zastosować InternetReadFile i to co odczytam jakoś konwertować na txt z HTML?

Edit: a moze tzreba pobrac jakeis cooki zeby to sprawdzic?
Avatar użytkownika
politech
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): poniedziałek, 26 lipca 2010, 13:21
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2006
Gadu Gadu: 0
    Windows XPFirefox

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ł: Brak zalogowanych użytkowników i 5 gości

cron