IdHTTP i obługa strony HTML / PHP

0

Witam was,

Piszę program do drukowania listów. Normalnie wygląda to tak że nalezy wejść na stronę www -> podać login i hasło -> zalogować się klikając przycisk -> Po zalogowaniu kliknąć następny przycisk aby przejść do właściwej zakładki -> wypełnić edity i kliknąc drukuj.

W chwili obecnej doszedłem do etapu logowania.

Za pomocą komponenty Indy IdHTTP i IdSSL loguje się w następujący sposób:

Function Login(Client,Login,Password,Key : String);
Const
  Log = 'menu_name=parcelsMenu&loginKey=';
var
  Input, OutPut : TStringStream;
Begin
  Input := TStringStream.Create('');
  Output := TStringStream.Create('');
  HTTP.Host := Https;
  try
    Input.WriteString(Log+LoginKey+'&customerId='+Client+'&userName='+Login+'&password='+Password);
    HTTP.Post('https://www.jakastam.com/php.do?',Input, Output);
    Result := Output.DataString;
  finally
    Input.Free;
    Output.Free;
  end;

No i funkcja zwraca mi ładnie kod strony html już po zalogowaniu. Ale cokolwiek chce dalej zrobić to sie nie da wywala mnie do okna logowania tak jakby sesja wygasła od razu po zalogowaniu.

Czy da się za pomocą tego komponentu obsługiwać strony? Czy jest mozliwe wywołanie z tego komponentu procedury php (zamiast kliknać button na stronie www chce to zrobić programowo) Czy w ogóle to jest wykonywalne?

0

Tak, jest wykonalnie, jeżeli strona nie potrzebuje do obslugi JavaScriptu. Z Indy to pomóć Tobie może chyba tylko @kAzek. Ja od siebie mogę polecić Synapse oraz mój artykuł o tym pakiecie i obsłudze HTTP Obsługa protokołu HTTP przy użyciu pakietu Synapse - nie wiem czego oczekuje ta strona, ale najlepiej pod Snifferem / Debuggerem HTTP prześliedzić co wysyła POSTem prawdziwa przeglądarka i postarać się wysłać identyczne dane. Czasami należy wzbogacić nagłówki, o czym wspominam w moim artykule, jednak przypadki, w których spotkałem się z tak restrykcyjną obsługą danych wysyłanych metodą POST moge policzyć na palcach jednej ręki.

0

na 99% nie ma włączonych ciastek, ale jak to zrobić to już help/google

0

Co do problemu autora IdCookieManaer'a ci brakuje połączonego z tym komponentem do obsługi ciastek i przy okazji sesji.

olesio napisał(a):

Tak, jest wykonalnie, jeżeli strona nie potrzebuje do obslugi JavaScriptu.

Mylisz się. Jeśli są to wywołania AJAX'owe czy no nie wiem jakoś formularz budowany jest dynamicznie to zawsze można to symulować bo to nic innego jak request starego i znanego od lat protokołu HTTP i nie ma w tym żadnej magii jeśli jest używany przez JS. Jeśli pola są zagmatwane np. przez opfuscowany JS to należy skorzystać z narzędzia do podglądu ruchu np. dragonfly czy innego tego typu tool'a.

0

@szopenfx: możliwe, ja myslałem że strony z JS można ogarnąc tylko pod TWebBrowserem. Jeżeli możesz to prosze podaj przykładowy kod jak skorzystać ze strony z JS. Najlepiej pod Synapse, ale jeśli wolisz Indy to też może być. Na przykład jak wyciągnąc bezpośredni link do pliku na mediafire wchodząc na strone z linkiem? Bo w reści takowy link figuruje i można go sobie podejrzeć w źródle strony. Jednak treść takową zobaczymy tylko pod prawdziwą przeglądarką www. Pod Synapse czy Indy nie wiem jak można by to zrobić. Wiele nie kombinowałem, ale jak ktoś by o tym machnął artykuł z przykładem kodu to było by miło i można by się czegoś nowego nauczyć.

1

Do pobrania tego linku bezpośredniego postawiłem na formie 2 komponenty TIdHTTP oraz połączony z nim TIdCookieManager, do tego button i memo do wyświetlenia źródła.
A oto kawałek kodu pobierającego źródło strony:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Text := IdHTTP1.Get('http://www.mediafire.com/?b1tb3ix349saegw');
end;

Żadne standardowe właściwości komponentów nie zmieniane. w rezultacie dostaje między innymi:

...
kNO = "http://205.196.121.131/6nwtn6y128pg/b1tb3ix349saegw/tajniacki.7z";
...

co jest linkiem bezpośrednim do pliku o który ci chodziło.

Mogę napisać artykuł o INDY a dokładniej o HTTP/S choć w zasadzie to co jest na 4p wystarcza do złożenia wszystkiego do kupy. Chyba, żeby skupić się na pokazaniu zasady działania debuggera http, zabezpieczeniach i problemach na jakie można natrafić, ale nie wiem czy to dobry pomysł...

0

UP.
Tak, dobry pomysł, przyda się innym myślę...

0

Ups, ale ze mnie lama. Nieraz człowiek coś przeoczy. Być może coś się zmieniło albo może zamiast kno = wyszukiwałem coś innego przez literówkę, bo Synapse również pobiera tę stronę z tym stringiem. Co do skorzystania z JS, wiadomo że wolał bym artykuł z Synapse. Ale artykułów na 4p nigdy dość. Szczególnie szczegołowych i z przykładowymi kodami. Także w wolnym czasie może się pokusisz się o napisanie takowego. Ja napisałem dla Synapse i HTTP, to może coś aktualnego i do poczytania przydało by się o Indy. Zwłaszcza jeżeli znajdziesz jakieś strony z JS, które trzeba dodatkowo odpowiednio obslużyć to mogłbyś to zawrzeć jako akapit/rozdział w swoim artykule. I dzięki za przykład, który mi uświadomił, że nieraz coś człowiek na szybko robi i wydaje mu się, że nie działalo. A jednak jak widać działa :)

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