CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Rejstrowanie na https za pomoca WinInet
Strona 2 z 3

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: środa, 28 lipca 2010, 21:25
przez politech
Kolejne pytanie po zalogowaniu na konto chciałbym dalej działać na stronach to musze je otrzymac jakos InternetReadFilem czy jakos inaczej to wykonac?

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: środa, 28 lipca 2010, 21:56
przez polymorphism
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.

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: środa, 28 lipca 2010, 22:07
przez politech
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?

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: środa, 28 lipca 2010, 22:23
przez polymorphism
(...) 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.

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: środa, 28 lipca 2010, 22:31
przez politech
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?

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: środa, 28 lipca 2010, 23:01
przez polymorphism
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.

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: czwartek, 29 lipca 2010, 15:25
przez politech
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

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: czwartek, 29 lipca 2010, 16:41
przez polymorphism
(...) 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ę.

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: czwartek, 29 lipca 2010, 20:16
przez politech
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

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: czwartek, 29 lipca 2010, 21:22
przez polymorphism
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.

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: czwartek, 29 lipca 2010, 21:27
przez politech
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

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: czwartek, 29 lipca 2010, 21:31
przez faranek22
z certyfikatem ssl zawsze miałem problem....

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: czwartek, 29 lipca 2010, 21:37
przez polymorphism
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 */
}

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: czwartek, 29 lipca 2010, 21:41
przez politech
No to zabieram się do analizowania POST'ow z Live HTTP Header

Re: Rejstrowanie na https za pomoca WinInet

Nowy postNapisane: poniedziałek, 2 sierpnia 2010, 17:25
przez politech
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?