Just nu i M3-nätverket
Jump to content

Läsa inloggningskyddade sidor med PHP


TicoRoman

Recommended Posts

Jag behöver hämta vissa uppgifter från flera sidor på en webbsajt. Dock måste man logga in på webbsajten för att komma åt dessa sidor.

 

Det jag undrar är om det går att komma åt o läsa in dessa sidor med fopen()?

 

Egentligen ska man logga in via ett formulär, men det går att logga in genom att anropa http://www.domän.com/loguser.php?action=1&username=medidem&password=medidem , dvs skicka användarnamn och lösenord den vägen istället. ;)

 

loguser.php är alltså inloggningsscriptet, som vid lyckad inloggning sparar en session/cookie eller vad den nu gör och redirectar vidare. Det finns alltså inget att läsa in från den filen.

 

Går det att logga in på det sättet med PHP och behålla inloggning-sessionen mellan min server och webbsajten och läsa de sidorna som jag vill komma åt?

 

 

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

 

 

[inlägget ändrat 2002-11-22 16:57:13 av TicoRoman]

Link to comment
Share on other sites

Ulf Härnhammar

Jag tror inte att fopen() kommer ihåg cookies. Du får använda fsockopen() mot webbservern, och prata HTTP med den.

 

HTTP-specifikationen är RFC 2616.

 

 

Link to comment
Share on other sites

Jag tror inte att fopen() kommer ihåg cookies. Du får använda fsockopen() mot webbservern, och prata HTTP med den.

 

HTTP-specifikationen är RFC 2616.

Då gäller det att kunna "prata" HTTP. ;) Nah fick bara inte igång det riktigt.

 

Ett annat alternativ är att använda curl (http://www.php.net/manual/en/ref.curl.php).

Det verkar bara bra. Hittade till o med ett exempel på deras sida på det som jag vill åstadkomma. (http://curl.haxx.se/libcurl/php/examples/?ex=cookiejar.php)

 

Det gäller bara att kunna installera den (WinXP, Apache 1.3.27, PHP 4.2.3). Verkade vara lite knepigt. Man ska tydligen installera även "libcurl", om det nu inte är samma sak, samt hålla på o kompilera om grejer. Det är inte riktigt min grej. :( Är det någon som har en bra guide hur man gör, så är jag tacksam!

 

Ska försöka under helgen och se om jag lyckas.

 

Tack för svaren!

 

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

 

 

 

[inlägget ändrat 2002-11-23 11:30:41 av TicoRoman]

Link to comment
Share on other sites

Sedan är det bara att konfigurera PHP med --with-curl=/sökväg/till/curl

och kompilera.

Och så var det det här med att kompilera... ;)

 

Det är just den biten jag inte vet hur man gör. Ska man ladda ner php-källkod och kompilera, eller konfigurera existerande php-installation? Hur? "--with-curl" vart? :(

 

Sorry för att jag "spamar" php-forumet med en massa frågor. :/

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

[inlägget ändrat 2002-11-23 11:59:11 av TicoRoman]

Link to comment
Share on other sites

Jag har aldrig kompilerat på Windows, men först och främst ska du ha källkoden samt en kompilator (ex. MS Visual C++).

 

Men vilken PHP-dist kör du nu? De färdigkompilerade som man laddar ned tror jag brukar ha de flesta extrafunktioner implementerade redan, det är bara att man ska installera det externa biblioteket, och sedan ta bort kommentaren framför en rad i php.ini.

 

Sök efter curl i din php.ini, så borde det stå en sökväg till en dll-, exe- eller so-fil. Där ska du lägga din curl.exe och döpa om den. Ta sedan bort kommenteringstecknet, och starta om Apache.

 

[inlägget ändrat 2002-11-23 12:29:45 av Cariad]

Link to comment
Share on other sites

Kopierat från http://www.php.net/manual/en/ref.curl.php (inlägget av jerome, nästan längst ner):

 

To add cURL extension, YOU DON'T NEED to compile anything.

All the extensions that you need are in the C:\php\extensions folder. To add cURL or any other extensions:

 

=> Have the libeay32.dll and ssleay32.dll in the system32 folder (already done if you installed PHP)

 

=> Copy all dlls from php/dll/ folder to winnt/system32/ (libeay32.dll and ssleay32.dll are already there if you followed

the previous steps)

 

=> Remove the ";" in front of extension=php_curl.dll in php.ini.

 

Those instructions come from: http://www.php.net/manual/en/install.windows.php #install.windows.extensions

 

And it should work, just test it with curl functions into your php script.

 

Link to comment
Share on other sites

Utmärkt! Det var bara ta bort kommenteringtecnet i php.ini.

 

Nu kommer jag åt de lösenordsskyddade sidorna.

 

Dock återstår ett sista problem med det här. Jag använder följande kod:

<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, "/temp/cookieFileName");
curl_setopt($ch, CURLOPT_URL,"http://www.komsiluk.com/skripte/loguser.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "action=1&username=medidem&password=medidem");

ob_start();		// prevent any output
        curl_exec ($ch);	// execute the curl command
ob_end_clean();	// stop preventing output

curl_close ($ch);
unset($ch);


$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIEFILE, "/temp/cookieFileName");
curl_setopt($ch, CURLOPT_URL,"http://www.komsiluk.com/search.php?method=5&page=2");



$buf2 = curl_exec ($ch);

curl_close ($ch);

while(!feof($buf2))
{
$result = fgets($buf2);


if(preg_match("/" . addcslashes(quotemeta("<a href=\"/user_profil.php?user="), "/") . "([^&\"]+)/i", $result, $match))
{
	echo $match[1];
	echo "<br />";

}

}

?>

 

Det som inte fungerar är while-slingan och det som finns inuti den. Meningen är att den ska söka igenom varje "rad" i variabeln $buf2. $buf2 innehåller källkoden för webbsidan, som i sin tur innehåller en lista på användare. Det är dessa jag ska komma åt.

 

Eftersom $buf2 inte är en "pekare" till en öppnad fil så fungerar inte feof($buf2) samt fgets($buf2). Hur ska jag göra istället?

 

Tillägg:

Nu kom jag att tänka på att man kanske skulle kunna "spränga upp" (tex explode('\n', $buf2) lr något sådant) $buf2 till en array, så att varje rad fick en "plats" i arrayen och sedan köra en loop utifrån det. Men jag avvaktar experternas råd och åsikter innan jag försöker med något.

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

 

[inlägget ändrat 2002-11-24 13:43:55 av TicoRoman]

[inlägget ändrat 2002-11-24 13:58:25 av TicoRoman]

[inlägget ändrat 2002-11-24 13:58:57 av TicoRoman]

Link to comment
Share on other sites

Va är komsiluk.com för någe? Det gick iaf å logga in med mediem...

En billig kopia av Lunarstorm :) medidem är bara ett testkonto.

 

komsiluk = grannskap

 

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

 

[inlägget ändrat 2002-11-24 14:31:45 av TicoRoman]

Link to comment
Share on other sites

vilket språk va det på arabiska eller nåt va?

Nej då inte arabiska! :)

 

Det är bosniska.

 

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

Link to comment
Share on other sites

Du skulle ju kanske kunna göra så här istället (har dock inte testat):

$buf2 = curl_exec($ch);
curl_close($ch);

// Bytte ut till preg_match_all
if(preg_match_all("/" . addcslashes(quotemeta("<a href=\"/user_profil.php?user="), "/") . "([^&\"]+)/i", $result, $match))
{

foreach($match as $t) {
echo $t;
echo "<br />";
}

}

 

Uppdatering: Missade byta namn på en variabel... Oops..

[inlägget ändrat 2002-11-24 14:55:16 av Cariad]

Link to comment
Share on other sites

foreach($match as $t) {
echo $t;
echo "<br />";
}

Det har smugit in sig ett litet fel i din kod. Det ska vara $match[1] istället för $match.

 

Tack!

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

[inlägget ändrat 2002-11-24 15:31:49 av TicoRoman]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...