Autor Zpráva
artie
Profil *
Ahoj,

už se několik dní snažím naprogramovat přihlášení na jeden web.

$postdata = http_build_query(
  array(
    'login'     => 'LOGIN',
    'password'  => 'HESLO',
  )
);

$opts = array('http' =>
  array(
    'method'  => 'POST',
    'header'  => 'Content-Type: application/x-www-form-urlencoded',       
    'content' => $postdata
  )
);

$context = stream_context_create($opts);

$fp = fopen("http://xxxxxx.cz/login.php", "r", false, $context);
$meta = stream_get_meta_data($fp);
fclose($fp);

To mi funguje, k přihlášení dojde. Nyní bych ale potřeboval přenášet informaci o přihlášení do dalších stránek, které chci načítat a kde je nutné být přihlášen.
Umím získat PHPSESSID z příchozích hlaviček:

$PHPSESSID = substr(trim(str_replace('Set-Cookie: PHPSESSID=','',$meta['wrapper_data'][16])),0,26);

ale když jej předám jako Cookie v novém požadavku (contextu), tak přihlášený nejsem.

Ví někdo, jak by se to mělo nejlépe provést?

Děkuji moc za jakoukoli radu
juriad
Profil
Z jakého důvodu používáš právě fopen, když existuje spolehlivé a jednoduché řešení v podobě knihovny cURL?
cURL už s cookies pracovat umí, viz například Dvojitý CURL

Je zajímavé, že tu nejdůležitější část kódu sem nedáš: jak vytváříš druhý request, který obsahuje cookie... tam bude chyba
artie
Profil *
Druhá část kódu je zde:

Chybu nevylučuji.

$opts = array('http' =>
  array(
    'header'  => 'Cookie: PHPSESSID='.$PHPSESSID.';',       
  )
);

$context = stream_context_create($opts);

$result = file_get_contents('http://xxxxxx.cz/stanka.php, false, $context);

Mělo by být jedno, jak volání stránky provedu curl, fopen, file_get_contents. Práce s stream_context_create mi přijde nejpohodlnější.
Alphard
Profil
[#2] juriad
cURL není nenahraditelný, někteří si zcela vystačí se zde použitými funkcemi.

[#3] artie
Zkoušel jste variantu bez středníku? Já jsem vždy používal vždy spíš cURL, ale ve většině příkladů, na které jsem se teď podíval, buď řádky neoddělují, nebo používají \r\n, středník nikde.
artie
Profil *
ano, i bez středníku v kombinaci s různým odřádkováním, nic bohužel nezabralo.
Ještě koukám, že tam mám překlep (chyběla uvozovka, ale to jen zde):

file_get_contents('http://xxxxxx.cz/stanka.php', false, $context);

Zkusím to přes curl.
Tori
Profil
K tomuto:
$PHPSESSID = substr(trim(str_replace('Set-Cookie: PHPSESSID=','',$meta['wrapper_data'][16])),0,26);
1) pro session ID se běžně používá md5, která vrací 32 znaků dlouhý hash (nebo 40-znakový od sha1). Těch 26 znaků je nějaká vlastní hashovací funkce? Taky se dá číst prostě vše mezi rovnítkem a středníkem.
2) dá se spoléhat na to, že v rámci jedné (sub)domény bude hlavička Set-Cookie vždy pod stejným klíčem? (to není rada, spíš mě to samotnou zajímá)

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: