PDA

View Full Version : [C#] Login su Forum phpbb


leonapster
21-03-2008, 20:17
Ciao, devo eseguire il login su un forum phpbb, e quindi accedere alle pagine con accesso ristretto.



Sono riuscito a trovare la stessa cosa ma in php:

function login($username, $password)
{
global $_SERVER;

// Generate post string
$post_fields = $this->array_to_http(array(
'username' => $username,
'password' => $password,
'autologin' => 1,
'redirect' => 'index.php',
'login' => 'Log In',
));
// Init curl
$this->curl = curl_init();
// Set options
curl_setopt ( $this->curl, CURLOPT_URL, $this->phpbb_url . 'ucp.php?mode=login' );
curl_setopt ( $this->curl, CURLOPT_POST, true );
curl_setopt ( $this->curl, CURLOPT_POSTFIELDS, $post_fields );
curl_setopt ( $this->curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt ( $this->curl, CURLOPT_HEADER, false );
curl_setopt ( $this->curl, CURLOPT_COOKIE, $this->cookie_name );
curl_setopt ( $this->curl, CURLOPT_COOKIEJAR, $this->cookie_name );
curl_setopt ( $this->curl, CURLOPT_COOKIEFILE, $this->cookie_name );
curl_setopt ( $this->curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] );
// Execute request
$result = curl_exec ( $this->curl );
// Error handling
if ( curl_errno ( $this->curl ) )
{
$this->error = array(
curl_errno($this->curl),
curl_error($this->curl),
);
curl_close ( $this->curl );
return false;
}
// Close connection
curl_close ( $this->curl );
// Return result
return true;
}

/*
@ Function : read() - Read a pages contents
@ About : Returns the contents of a url
@ Type : Public
*/
function read($page_url)
{
global $_SERVER;

// Init curl
$this->curl = curl_init();
// Set options
curl_setopt ( $this->curl, CURLOPT_URL, $this->phpbb_url . $page_url );
curl_setopt ( $this->curl, CURLOPT_POST, false );
curl_setopt ( $this->curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt ( $this->curl, CURLOPT_HEADER, false );
curl_setopt ( $this->curl, CURLOPT_COOKIE, $this->cookie_name );
curl_setopt ( $this->curl, CURLOPT_COOKIEJAR, $this->cookie_name );
curl_setopt ( $this->curl, CURLOPT_COOKIEFILE, $this->cookie_name );
curl_setopt ( $this->curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] );
// Execute request
$result = curl_exec ( $this->curl );
// Error handling
if ( curl_errno ( $this->curl ) )
{
$this->error = array(
curl_errno($this->curl),
curl_error($this->curl),
);
curl_close ( $this->curl );
return false;
}
// Close connection
curl_close ( $this->curl );
// Return result
return $result;
}



Mi servirebbe una traduzione php->C#.
L'importante è che dopo che ho fatto il login possa accedere alle pagine ristrette.

Grazie

Daniel_tex
21-03-2008, 21:06
insatllerei il php in win, poi farei un link tipo ~/forum/

ovvio dovrai ocnfigurare il db di phpbb, l'user di tipo admin e tutte le solite cavolate. il login non serve che lo traducono in c# lo fa già il php.

tomminno
21-03-2008, 21:47
Mi servirebbe una traduzione php->C#.
L'importante è che dopo che ho fatto il login possa accedere alle pagine ristrette.

Grazie

Quell'esempio in PHP potrebbe non andarti bene. Nel senso che quel codice effettua l'autenticazione lato server, ma poi che ci devi fare?
Le pagine le devi visualizzare su un browser o ti basta scaricare lato server il contenuto?

Se ti basta scaricare il contenuto delle pagine la classe C# da usare è HttpWebRequest, ma se devi fare un login lato server e rimandare la connessione ad un client, allora la strategia da intraprendere è completamente differente.

Nel mio caso avevo bisogno di far navigare l'utente facendogli fare il login automatico tra sistemi completamente differenti.
La soluzione migliore che ho trovato è quella di generare lato server una pagina html contente dei campi hidden con nome e valore corrispondenti a quelli attesi dalla pagina di login, faccio eseguire subito il submit nell'onload e la rimando verso il client.
In questo modo tutta la gestione della comunicazione (cookie ed eventuali) avviene lato client e l'utente non si accorge di niente.
In questo caso sarebbe impensabile di fare da proxy tra l'utente e l'altro server.

leonapster
21-03-2008, 23:00
Quello che dovrei fare io è una sorta di crawler

- Mi connetto ad un sito
- Leggo tutti gli url presenti
- Seguo ogni link
- Per ogni link ricavo il titolo della pagina e lo salvo

Alla fine di tutto devo avere

www.google.it - Google

dove www.google.it è il nome del sito, e Google è il nome della pagina


non so' se sono stato abbastanza chiaro

leonapster
22-03-2008, 13:23
non potrei usare HttpWebRequest con autenticazione su phpbb?

oppure fare l'autenticazione con php e poi leggere le pagine con HttpWebRequest in C#?

tomminno
22-03-2008, 14:19
non potrei usare HttpWebRequest con autenticazione su phpbb?


Certo.


oppure fare l'autenticazione con php e poi leggere le pagine con HttpWebRequest in C#?

Non puoi perchè non avresti i cookie di autenticazione da passare al server tramite HttpWebRequest.

leonapster
22-03-2008, 16:08
Certo.



e come si può fare?