|
Новичок
Регистрация: 03.07.2009
Сообщений: 2
Провел на форуме: 552
Репутация:
0
|
|
Народ, спасибо всем за инфо, которую здесь прочитал.
Написал такой код (на оптимальность не претендует, еще будет оптимизироваться):
PHP код:
<?
$key = 1;
function geturl($url,$postdata=0,$header=0,$additional_key=0) {
$poststr="";
if ($postdata)
while (list($name,$value)=each($postdata)){
if (strlen($poststr)>0)
$poststr.="&";
$poststr.=$name."=".urlencode($value);
}
// инициализация сеанса
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Формируем заголовок
if ($header){
curl_setopt($ch, CURLOPT_HEADER, 1);
// Помним кукисы
$user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/poster/cookies.txt';
curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file);
curl_setopt($ch, CURLOPT_NOBODY, 1);
}else{
curl_setopt($ch, CURLOPT_HEADER, 0);
}
if ($postdata){
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
$user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/poster/cookies.txt';
curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $poststr);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
if ($additional_key){
/* Скрытое поле token для memori */
if( preg_match('/name=\"token\" value=\"(.+?)\"/', $res, $out) ){
$res = $out[1];
}
}
curl_close($ch);
return $res;
}
if (!isset($_GET['go'])) {
// Собираем заголовок
$header = geturl('http://memori.ru/registration/',0,1);
// Берем значение скрытого поля
$token = geturl('http://memori.ru/registration/',0,0,1);
// Берем капчу
$captcha = geturl('http://memori.ru/captcha/',$postdata);
$im = imagecreatefromstring($captcha);
$pic_name = time().'_'.$key.'.jpg';
imagejpeg($im, $pic_name, 100);
// Сохраняем картинку у себя (подобие антикапчи)
$postdata = array(
'method' => 'base64',
'key' => $key,
'body' => $pic_name,
'ext' => 'png'
);
$rev = geturl("http://localhost/poster/in.php",$postdata); // регистрируем капчу у себя в системе
if (substr($rev,0,2)=='ok'){
//получаем id капчи в системе
$anti_captcha_id = substr($rev,3);
}else{
echo "Upload ERROR";
echo $rev;
exit;
}
echo '<img src="pic.php?id='.$anti_captcha_id.'">';
echo '<br /><form method="get"><input type="hidden" name="go" value="go"><input type="hidden" name="token" value="'.$token.'">Капча: <input type="text" name="captcha"><br />
Сессия: <input type="text" name="bobrologin" value="'.$session.'"><br /><input type="submit" value="Ну, была не была!"></form>';
} else {
echo $captcha = $_GET['captcha'];
echo '<br />';
echo $session = $_GET['session'];
echo '<br />';
echo $token = $_GET['token'];
echo '<br />';
$postdata = array(
"login" => "testerqwerty23",
"email" => "mainvoid3@mail.ru",
"inviter" => "",
"token" => $token,
"captcha" => $captcha,
"password" => "123456",
"password_confirm" => "123456",
);
echo '<pre>'; print_r($postdata); echo '</pre>';
$recdata = geturl('http://memori.ru/registration/',$postdata);
echo '<base href="http://memori.ru">';
echo $recdata;
if (is_file('./cookies.txt')) unlink('./cookies.txt');
}
?>
на всякий случай
in.php:
<?php
//echo '<pre>'; print_r($_POST); echo '</pre>';
$filename = 'user_'.$_POST['key'].'.txt';
if (is_file($filename)) unlink($filename);
$status = 'ok';
if ($status == 'ok') {
$id = 1;
$handle = fopen($filename, 'a');
if (is_writable($filename)) {
fwrite($handle, $id.'|'.$_POST['body']);
}
fclose($handle);
echo $status.'|'.$_POST['body'];
}
?>
pic.php:
<?
header('Content-Type: image/jpeg');
$im = imagecreatefromjpeg($_GET['id']);
imagejpeg($im, NULL, 100);
?>
Но форма на мемори остается глухой к такому запросу, т.е. не выводится ни сообщений об ошибках, ни об удачном завершении регистрации. На некоторых других формах такой скрипт отрабатывал.
Кто нибудь может подсказать в чем дело?
|