Tworzę portal w którym wykorzystany jest skrypt forum phpbb. Potrzebuję zrobić tak, aby założenie konta na owym portalu powodowało zdalne założenie konta na forum (z tym samym loginem i hasłem). Pierwsze co przyszło mi na myśl to CURL stworzyłem coś takiego no i prawie działa, ale niestety nie do końca. Cała procedura musi składać się z dwóch etapów:
- zaakceptowania regulaminu (formularz 1)
- wysłania wypełnionego formularza rejestracji (formularz 2)
Przypuszczam, że w tym miejscu pojawia się problem z polami 'form_token' które są poprawnie pobrane dla formularza 1, ale dla drugiego już chyba nie :/
oto kod:
//config::getConfig('url') - adres strony (http://localhost/kodeks/)
$o = new regbot();
$data = $o->curl_get( config::getConfig('url').'forum/ucp.php?mode=register');
$creation_time = $o->regular('<input type="hidden" name="creation_time" value="([a-z0-9]+)" />', $data);
$form_token = $o->regular('<input type="hidden" name="form_token" value="([a-z0-9]+)" />', $data);
$data = $o->curl_post( config::getConfig('url').'forum/ucp.php?mode=register', "creation_time=$creation_time&form_token=$form_token&agreed=1" );
$creation_time = $o->regular('<input type="hidden" name="creation_time" value="([a-z0-9]+)" />', $data);
$form_token = $o->regular('<input type="hidden" name="form_token" value="([a-z0-9]+)" />', $data);
$data = $o->curl_post( config::getConfig('url').'forum/ucp.php?mode=register', "username=slammer&email=test123@gmail.com&email_confirm=test123@gmail.com&new_password=haselko&password_confirm=haselko&tz=1&change_lang=0&creation_time=$creation_time&form_token=$form_token&agreed=true&submit=true" );
//print $data;
class regbot {
public function curl_get( $url ) {
$conn = curl_init();
curl_setopt( $conn, CURLOPT_URL, $url );
curl_setopt( $conn, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] );
curl_setopt
( $conn, CURLOPT_COOKIEJAR
, dirname(__FILE__).'/'.$this->cookie_file ); curl_setopt
( $conn, CURLOPT_COOKIEFILE
, dirname(__FILE__).'/'.$this->cookie_file ); curl_setopt( $conn, CURLOPT_ENCODING, 'gzip, deflate' );
curl_setopt( $conn, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $conn, CURLOPT_REFERER, config::getConfig('url') );
$data = curl_exec( $conn );
curl_close( $conn );
return $data;
}
public function regular( $patt, $zawartosc ) {
$content = $content_str[1];
return $content;
}
public function curl_post( $url, $post ) {
$conn = curl_init();
curl_setopt( $conn, CURLOPT_URL, $url );
curl_setopt( $conn, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] );
curl_setopt
( $conn, CURLOPT_COOKIEJAR
, dirname(__FILE__).'/'.$this->cookie_file ); curl_setopt
( $conn, CURLOPT_COOKIEFILE
, dirname(__FILE__).'/'.$this->cookie_file ); curl_setopt( $conn, CURLOPT_ENCODING, 'gzip, deflate' );
curl_setopt( $conn, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt( $conn, CURLOPT_POST, 1 );
curl_setopt( $conn, CURLOPT_REFERER, config::getConfig('url') );
curl_setopt( $conn, CURLOPT_POSTFIELDS, $post );
curl_setopt( $conn, CURLOPT_RETURNTRANSFER, 1 );
$data = curl_exec( $conn );
curl_close( $conn );
return $data;
}
}