Przekierowanie POST i obsługa HTTPS

0

Witam.
Mam dwa problemy z INDY w Delphi 7.

Otóż potrzebuję wysłać dane logowania w dwóch formularzach, osobno.

  1. Pierwszy formularz znajduje się na stronie z protokołem HTTPS. Proszę mi powiedzieć, co trzeba ustawić / dodać, aby formularz się wysyłał? Wyrzuca mi błędy, a wiem że na pewno trzeba coś dodać.

  2. Drugi formularz znajduje się na stronie, która po zalogowaniu przekierowywuje i z tego powodu dostaję błąd 302. Co zrobić, aby INDY podążało za tym przekierowaniem i dopiero zwróciło wynik logowania?

Gdy formularze są bez HTTPS i bez przekierowywań to wszystko działa.

function PostIndy(data1, data2: string): string;
var
  lHTTP: TIdHTTP;
  lParamList: TStringList;
begin
  lParamList := TStringList.Create;
  lParamList.Add('login=' + data1);
  lParamList.Add('password=' + data2);
  lHTTP := TIdHTTP.Create(nil);
  try
    Result := lHTTP.Post('http://www.strona.pl/formularz.php', lParamList);
  finally
    lHTTP.Free;
    lParamList.Free;
  end;
end;
0

Potrzeba tutaj wiedzy, którą ma @kAzek - tak że kiedy będzie mógł to się pewnie wypowie. Nie mam pojęcia jak w Indy, ale w Synapse żeby mieć obsługę HTTPS należy dołaczyć odpowiedni moduł, plus dllki do obsługi SSL. Opisałem to w moim artykule o korzystaniu z tego pakietu. Co do obsługi 302, to jeżeli jeszcze dobrze pamiętam komponent do HTTP z pakietu Indy ma własność HandleRedirects.

0

Tak myślałem i wcześniej już to zrobiłem, mimo to nie działa. Ustawiłem HandleRedirects na True i wywala błąd:

Project Project1.exe raised exception class EIdHTTPProtocolException with message 'HTTP/1.0 302 Found'. Proccess stopped. Use Step or Run to continue.

i wskazuje na linijkę:

Result := lHTTP.Post(site, lParamList);

dodanie znaczników <code class="delphi"> i <code class="none"> - @furious programming

0

Sprecyzuj wersję INDY. Jeśli korzystasz z oryginalnych komponentów z D7 to odinstaluj je i pobierz najnowszą wersję, wiele bugów zostało poprawionych. Adres strony jeśli nie jest tajemnicą też bardzo pomógłby w namierzeniu problemu, ew. pokaż nagłówki jakie otrzymujesz. Użycie sniffera np. wireshark pomoże ci w porównaniu żądań i odpowiedzi po HTTP - w ten sposób możesz uzupełnić np. brakujące wpisy w nagłówku porównując ruch sieciowy programu z przeglądarką.
//dopisano: teraz doczytałem, że chodzi o https - tu sniffer nie wiele zdziała
Umieść też komponent IdCookieManager (nie pamiętam dokładnej nazwy) i w IdHttp wskaż na niego - widzę, że próbujesz się zalogować a do tego niezbędne jest przechowywanie ciastek, INDY zrobi to za ciebie po dodaniu tego komponentu.

0

Być może za duża liczba przekierowań i trzeba RedirectMaximum.

0

Poradziłem sobie z HTTPS, jednak musiałem napisać program w Delphi XE4, wtedy zadziałało, wystarczył komponent IdSSLIOHandlerSocketOpenSSL1:

lHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);

W Delphi 7 coś mi nie chciało to działać.

Przekierowanie rozwiązane. Oryginalnie na stronie było ukryte pole o nazwie page i wartość overview, dlatego co innego pokazywało się w przeglądarce, a co innego w programie. Dodałem do wysyłania POST pole: page=overview i wszystko działa.

Problem rozwiązany, można zamknąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1