Autor Zpráva
kajaman
Profil
potřeboval bych zautomatizovat následující akci:

1, k webové aplikaci se přihlašuji pomocí jména a hesla přes formulář na nějaké vstupní stránce, třeba http://vstup.html
2, po přihlášení mě to pustí na další stránku s dalším jednoduchým formulářem, který vyplním a odešlu.
3, Jako odpověď dostanu krátký řetězec, něco jako "ano" nebo "ne"

Potřeboval bych napsat skript, který vezme parametr, přihlásí se k té vzdálené aplikaci, vyplní formulář
a převezme odpověď, kterou potom zpracuji ve svém skriptu. Můžete mě prosím nasměrovat? Pak už
se tím nějak prokoušu...
nightfish
Profil
kajaman:
Můžete mě prosím nasměrovat?
V PHP ti pomůže curl
A taky se hodí nějaký doplněk prohlížeče, který ti zobrazuje HTTP hlavičky - aby sis ověřila, jaká data a v jaké podobě se odesílají, případně přijímají.
kajaman
Profil
děkuju, curl mě napadl (intuitivně, vůbec ho neznám), ale nebyl jsem si jistý ... jinak používám FireBug..
kajaman
Profil
ahoj, zatím jsem se dopracoval k tomuto řešení, ale mám ještě doplňující dotazy:

1, stačí takhle, nebo je tam nějaká chyba (bezpečnostní nebo tak něco)
2, může provozovatel té vzdálené aplikace poznat, že se už nepřihlašuji přes prohlížeč ručně, ale že jsem si to zautomatizoval?
(ne že by na tom bylo něco špatného, ale přece...)

díky moc!


$url = "http://vstup.html";
$ch = curl_init();    
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, $url); 

curl_setopt($ch, CURLOPT_POSTFIELDS, array("login" => "prihlas_jmeno", "password" => "heslo"));
$result = curl_exec($ch); 

curl_setopt($ch, CURLOPT_POSTFIELDS, array("polozka" => "hodnota"));
$result2 = curl_exec($ch);
curl_close($ch); 

if(strpos($result2, "Ano") === false)
  echo "zaznam neni v db";
else
  echo "je v db";
ninja
Profil
Poznat to může podle user agenta.

Neznáme podrobnosti, ale zvažte jestli tímto přístupem nebudete porušovat autorský zákon - nezákoné vytěžování cizí databáze.
kajaman
Profil
ninja:
zvažte jestli tímto přístupem nebudete porušovat autorský zákon

Ne, já mám do té databáze legitimní přístup. Jde jen o to, že si chci ulehčit a urychlit práci... stačí nastavit hlavičku user-agent nebo tak něco?
ninja
Profil
kajaman: Jestli máte legitimní přístup tak nemusíte řešit user-agenta, vůbec nevadí že bude vidět přístup přes curl.

Jestli ale máte povolený přístup jen jako uživatel přes webové rozhraní, stále můžete tímto automatickým přístupem porušovat zákon. To je právě to, na co upozorňuji.
kajaman
Profil
ninja:
hmmm, děkuji za upozornění, podívám se na to, asi si prostě budu muset přečíst celý autorský zákon (pokud ovšem nevíte konkrétně na kterou část se odvoláváte?) ... Každopádně nehodlám využívat cizí db v rozporu se zákonem...

Jestli máte legitimní přístup tak nemusíte řešit user-agenta
... rychlost zpracování mi přinese konkurenční výhodu, takže bych rád udržel (pokud je to možné) v tajnosti, jakým způsobem pracuji...

... a k tomu kódu jsou nějaké připomínky? Mimochodem nepozná to provozovatel spíš podle Hosta, a ne podle user agenta? Jak mohu přenastavit hlavičky tak, aby to nemohl poznat?
ninja
Profil
§ 90 a 91 autorského zákona.

Pokud jste podnikatel, respektive učastník hospodářské soutěže, připadá v úvahu ještě nakalá hospodářská soutěž.
kajaman
Profil
ninja:
OK, děkuji za připomínky k legislativě. K tomu kódu nic?
AM_
Profil
kajaman:
1, stačí takhle, nebo je tam nějaká chyba (bezpečnostní nebo tak něco)
2, může provozovatel té vzdálené aplikace poznat, že se už nepřihlašuji přes prohlížeč ručně, ale že jsem si to zautomatizoval?
(ne že by na tom bylo něco špatného, ale přece...)
funguje to, nebo ne?
- ano - co ještě řešit?
- ne - zjisti proč: podívej se (třeba přes mozillí livehttpheaders), jak přesně vypadá požadavek odesílaný webovým prohlížečem, a pak ho porovnej s požadavkem, který odesíláš ty. Je tam rozdíl? Zobrazí se správně? Přijde správná odpověď? není chyba až ve zpracování?
kajaman
Profil
Funguje to, požadavky vypadají zcela stejně, jen host je jiný. Chtěl jsem, aby byly úplně stejné, zkoušel jsem nastavit něco jako:
curl_setopt($ch,CURLOPT_HTTPHEADER,array ("Host: ta_spravna_stranka.cz" ));


... ale na to vůbec nereaguje
AM_
Profil
kajaman:
$url = "http://vstup.html";
teď teprva koukám, tohle rozhodně není platná URL! není problém náhodou v tom?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0