PHP и с чем его едят....

Dre.hz

Active Member
Ответ: PHP и с чем его едят....

переписывать нужно все урлы на лету.
 

Cris

Member
Ответ: PHP и с чем его едят....

ну ладно там с картинками, их мона или отключить или копирывать себе и сохранять на пару дней, но как с куками, сесиями?
скажите де почитать симантику сесий, и как в пхп проверять есть куки или нема?
 

Cris

Member
Ответ: PHP и с чем его едят....

кста а че будет если там страничка неадер пошлет с файлом, ну там начнется закачка файла?
 

Dre.hz

Active Member
Ответ: PHP и с чем его едят....

ну и пусть там будут куки, хедеры, и прочая лабудень. Она ж текстом передается - вот и передавай ее. А урлы переписываь все-равно надо.

Можешь еще и СURL заюзать
 

Тагрим

Поняшка
Ответ: PHP и с чем его едят....

ну да, походу баш.клаб на курлах, а нсчет куков

PHP:
<?
setcookie(blablabla);
checkcookie(blablabla);
?>
вот те и проверка/установка куков...
 

Cris

Member
Ответ: PHP и с чем его едят....

ну да, походу баш.клаб на курлах, а нсчет куков

PHP:
<?
setcookie(blablabla);
checkcookie(blablabla);
?>
вот те и проверка/установка куков...
не совсем понял, сотри када мы будем закачивать страничку, то страничка сформируеться и отошлет куки, как проверить отосланы ли куки, и как до них добраться чтоб зделать пересылку их.
 

Dre.hz

Active Member
Ответ: PHP и с чем его едят....

ну да, походу баш.клаб на курлах, а нсчет куков

PHP:
<?
setcookie(blablabla);
checkcookie(blablabla);
?>
вот те и проверка/установка куков...
Зачем? Передавай то, что получил вместе с хедерами, там уже есть куки.
 

bllem

New Member
Ответ: PHP и с чем его едят....

мда... разберитесь в протоколе HTTP для начала. Дело пока только дре сказал. Рализовывал бота для "бойцовского клуба", там и сессия и кукисы. Вобще интересная реализация получилась.
Кусок:
PHP:
// получение данных www-аутентификации
if ($PHP_AUTH_USER && $PHP_AUTH_PW){$auth_new=base64_encode("$PHP_AUTH_USER:$PHP_AUTH_PW");}

// установка cookie
$tmp=explode(".",$host_new);
$host_cookie=$tmp[count($tmp)-2]."_".$tmp[count($tmp)-1];
if (stristr($head,"Cookie:")){
preg_match_all("#Set-Cookie: (.*?)=\"?(.*?)\"?(; expires=(.*?))?[;\r]#is",$head,$cookie_array);
$perem_array=$cookie_array[1];
$value_array=$cookie_array[2];
$expires_array=$cookie_array[4];
for ($i=0; $i<count($perem_array); $i++){
if ($expires_array[$i] && strtotime($expires_array[$i],"\n")){$expires_array[$i]=strtotime($expires_array[$i],"\n");} else {$expires_array[$i]=time()+$cookie_expires;}
setcookie ($host_cookie."[".$perem_array[$i]."]",$value_array[$i],$expires_array[$i]);
$HTTP_COOKIE_VARS[$host_cookie][$perem_array[$i]]=$value_array[$i];
}
}

// заголовок www-аутентификации
if (stristr($head,"WWW-Authenticate:")){
preg_match("#WWW-Authenticate: (.*?)[\r\n]#is",$head,$auth);
header("WWW-Authenticate: $auth[1]");
header("HTTP/1.0 401 Unauthorized");

// обработка форм
preg_match_all("!(<form[\s>].*?\>|<form>)!is",$content,$form_array); 
$form_array=array_values(array_unique($form_array[0]));
for ($i=0;$i<count($form_array);$i++){
preg_match("! action[\s]*=[\s]*\"?'?(.*?)[\"\'\s>]!is",$form_array[$i],$tmp);
$action_array[$i]=$tmp[1];
if (!$action_array[$i]){$action_array[$i]=$location;}
if (stristr($form_array[$i],"post")){$method_new="POST";} else {$method_new="GET";}
$form_array_new[$i]=preg_replace("' action=.*?([\s>])'si","$1",$form_array[$i]);
$form_array_new[$i]=preg_replace("' method=.*?([\s>])'si","$1",$form_array_new[$i]);
$form_array_new[$i]=preg_replace("'<form'si","<form method=post",$form_array_new[$i]);
$session_code=code($action_array[$i]);
$replace="$form_array_new[$i]
<input type=\"hidden\" name=\"session_new\" value=\"$session_code\">
<input type=\"hidden\" name=\"referer_new\" value=\"$location_code\">
<input type=\"hidden\" name=\"method_new\" value=\"$method_new\">";
if ($charset_default){$replace.="\n<input type=\"hidden\" name=\"charset_new\" value=\"$content_charset\">";}
$content=str_replace($form_array[$i],$replace,$content);
}
preg_match_all("#\.action[\s]*=[\s]*[\"'](.*?)[\"']#is",$content,$script_action_array);
$script_action_replace=str_replace(".action",".session_new.value",$script_action_array[0]);
replace($script_action_array[0],$script_action_replace,$script_action_array[1],"","");

// обработка ссылок
preg_match_all("#(<a|link|area)[\s].*?href[\s]*=[\s]*\\\?\"?'?(.*?)\\\?[\"'\s>]#is",$content,$href_array);
replace($href_array[0],$href_array[0],$href_array[2],"?session_new=","");
preg_match_all("#<(img|embed|frame|iframe|input|script)[\s].*?src[\s]*=[\s]*\\\?\"?'?(.*?)\\\?[\"'\s>]#is",$content,$src_array);
replace($src_array[0],$src_array[0],$src_array[2],"?session_new=","");
preg_match_all("#\.src[\s]*=[\s]*[\"'](.*?)[\"']#is",$content,$script_src_array);
replace($script_src_array[0],$script_src_array[0],$script_src_array[1],"?session_new=","");
preg_match_all("#<(body|table|td)[\s].*?background[\s]*=[\s]*\"?'?(.*?)[\"'\s>]#is",$content,$background_array);
replace($background_array[0],$background_array[0],$background_array[2],"?session_new=","");
preg_match_all("#(location.href|document.location|document.url|parent.location)[\s]*=[\s]*[\"'](.*?)[\"']#is",$content,$location_array);
replace($location_array[0],$location_array[0],$location_array[2],"?session_new=","");
preg_match_all("#(window.open|location.assign)\([\"'](.*?)[\"',\s>\)]#is",$content,$window_array);
replace($window_array[0],$window_array[0],$window_array[2],"?session_new=","");
preg_match_all("#[\"'](http://.*?|http%3A%2F%2F.*?)[\"'\s\)>]#is",$content_script,$http_array);
replace($http_array[0],$http_array[0],$http_array[1],"?session_new=","");

// обработка cookie в скриптах
preg_match_all("#document.cookie[\s]*=[\s]*[\"'](.*?)[\"']#is",$content,$script_cookie_array);
$script_cookie_array=$script_cookie_array[1];
for ($i=0; $i<count($script_cookie_array); $i++){
preg_match("#(.*?)=(.*?)[;\s]#is",$script_cookie_array[$i],$perem_cookie_array);
$find=$perem_cookie_array[1];
if ($find){
$replace=$host_cookie."[".$find."]";
$replace=str_replace("$find=","$replace=",$script_cookie_array[$i]);
$find=$script_cookie_array[$i];
$content=str_replace($find,$replace,$content);
 

bllem

New Member
Ответ: PHP и с чем его едят....

ну и отсылка данных для преличия:
PHP:
function connection($location){
global $HTTP_POST_VARS,$HTTP_COOKIE_VARS,$HTTP_POST_FILES,$referer_new,$auth_new,$charset_default;

$url_array=url($location,0);
$scheme=$url_array[1];
$method=$url_array[2];
$host=$url_array[3];
$port=$url_array[4];
$path=$url_array[5];
$get=$url_array[6];
$referer=$referer_new;
$auth=$auth_new;
$charset=$charset_default;

// обработка и кодирование GET, POST
$post=mass($HTTP_POST_VARS,1,"\$perem=\$value&");
if ($method=="GET" && $post){$get="$get&$post"; $post="";}
if ($get){$get="?$get";}

// обработка и кодирование COOKIE
$tmp=explode(".",$host); $host_cookie=$tmp[count($tmp)-2]."_".$tmp[count($tmp)-1];
$mass=$HTTP_COOKIE_VARS[$host_cookie];
$cookie=mass($mass,1,"\$perem=\$value; ");
if (substr($cookie,-2)=="; "){$cookie=substr($cookie,0,-2);}

// обработка multipart/form-data
$type=getenv('CONTENT_TYPE');
if ($type && stristr($type,"multipart/form-data")){
preg_match("#boundary=(.*)#si",$type,$boundary);
$boundary=$boundary[1];
$post=mass($HTTP_POST_VARS,0,"--$boundary\r\nContent-Disposition: form-data; name=\"\$perem\"\r\n\r\n\$value\r\n");
// поддержка upload
$mass=$HTTP_POST_FILES;
if ($mass){
reset($mass);
for ($i=0; $i<count($mass); $i++){
$perem=key($mass);
$filename=$mass[$perem][name];
$filetype=$mass[$perem][type];
if ($filename){
global ${"$perem"};
$filecontent=implode("",file(${"$perem"}));
$post.="--$boundary\r\nContent-Disposition: form-data; name=\"$perem\"; filename=\"$filename\"\r\nContent-Type: $filetype\r\n\r\n$filecontent\r\n";
}
}
}
$post.="--$boundary--";
}

// формирование заголовка запроса
$message="$method $path$get HTTP/1.0\r\n";
$message.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*\r\n";
if ($referer){$message.="Referer: $referer\r\n";}
$message.="Accept-Language: ru\r\n";
if ($charset){$message.="Accept-Charset: $charset\r\n";}
if ($auth){$message.="Authorization: Basic $auth\r\n";}
if ($post && $boundary){$message.="Content-Type: multipart/form-data; boundary=$boundary\r\n";}
if ($post && !$boundary){$message.="Content-Type: application/x-www-form-urlencoded\r\n";}
$message.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
$message.="Host: $host\r\n";
if ($post){$post="\r\n$post"; $message.="Content-length: ".strlen($post)."\r\n";}
$message.="Connection: close\r\n";
$message.="Cache-Control: no-cache\r\n";
$message.="Pragma: no-cache\r\n";
if ($cookie){$message.="Cookie: $cookie\r\n";}
if ($post){$message.="$post\r\n";}
$message.="\r\n";
//echo $message; // exit;

// запрос
$fp=fsockopen($host,$port,$errno,$errstr);
if (!$fp){echo "Нет связи с сервером. Повторите попытку позднее. $errno ($errstr).";}
fputs($fp,$message);
while(!feof($fp)){$fgets=fgets($fp,2048); if ($fgets=="\r\n" || $fgets=="\n"){break;} $head.=$fgets;}
while(!feof($fp)){$content.=fread($fp,2048);}
fclose($fp);
// echo $head;
// echo $content;

return array($message,$head,$content);
}

################################## функция кодирования ##############################
function code($str){
if (!$str){return;}
$str=parse($str);
$str=base64_encode($str);
$str=str_replace("=","$",$str);
$code="$str?";
return $code;
}
################################ функция декодирования ##############################
function decode($code){
if (!$code){return;}
if (substr($code,0,7)=="http://"){return $code;}
if (substr($code,-1)=="?"){$code=substr($code,0,-1);}
$code=str_replace("$","=",$code);
$str=base64_decode($code);
return $str;
}
################################# функция замены ссылок #############################
function replace($mass1,$mass2,$mass3,$left,$right){
global $content,$no_replace_all_array,$no_replace_left_array;
for ($i=0;$i<count($mass1);$i++){
$mass3[$i]=trim($mass3[$i]);
if ($mass3[$i]){
$sovp=0;
for ($j=0;$j<count($no_replace_all_array);$j++){if ($no_replace_all_array[$j]==$mass3[$i]){$sovp=1;}}
for ($j=0;$j<count($no_replace_left_array);$j++){if ($no_replace_left_array[$j]==substr($mass3[$i],0,strlen($no_replace_left_array[$j]))){$sovp=1;}}
if (!$sovp){
$replace=$mass3[$i];
$replace=$left.code($replace).$right;

$replace=str_replace($mass3[$i],$replace,$mass2[$i]);



$content=str_replace($mass1[$i],$replace,$content);
}
}
}
}

################################# функция обработки GET #############################
function get($get){
if (!$get){return;}
global $charset_default,$charset_new;
// декодирование HTML-мнемоник
$get=str_replace("&amp;","&",$get);
$get=str_replace("&quot;","\"",$get);
$get=str_replace("'","'",$get);
$get=str_replace("&lt;","<",$get);
$get=str_replace("&gt;",">",$get);
// url-кодирование
preg_match_all("#=([^&;]+)#is",$get,$mass);
$mass=$mass[1];
for ($i=0; $i<count($mass); $i++){
$find=$replace=$mass[$i];
$replace=urldecode($replace);
if ($charset_default){$replace=decode_charset($replace,$charset_default,$charset_new);}
$replace=urlencode(stripslashes($replace));
$get=str_replace("=$find","=$replace",$get);
}
// декодирование символов
$get=str_replace("%3A",":",$get);
$get=str_replace("%40","@",$get);
return $get;
}

######################## поиск ключей многомерного массива #########################
function keys($mass,$c,$d){
global $a,$b;
$keys=array_keys($mass);
for($i=0;$i<count($keys);$i++){
$perem=$d[$c]=$b[$a][$c]=$keys[$i];
$value=$mass[$perem];
for($j=1;$j<$c;$j++){$b[$a][$j]=$d[$j];}
if (is_array($value)){$c++; keys($value,$c,$d); $c--;} else {$a++;}
}
}

############################ функция обработки POST/COOKIE ##########################
function mass($mass,$code,$repl){
if (!$mass){return;}
global $charset_default,$charset_new;
global $a,$b;
$a=0; $b="";
// поиск ключей массива
keys($mass,1,null);
// формирование запроса
for($i=0;$i<count($b);$i++){
$perem="";
$value=$mass;
for($j=1;$j<=count($b[$i]);$j++){
if ($j==1){$perem.=$b[$i][$j];} else {$perem.="[".$b[$i][$j]."]";}
$value=$value[$b[$i][$j]];
}
if ($perem!="session_new" && $perem!="referer_new" && $perem!="method_new" && $perem!="charset_new"){
$value=urldecode($value);
if ($charset_default){$value=decode_charset($value,$charset_default,$charset_new);}
if ($code){$value=urlencode(stripslashes($value));}
$new=str_replace("\$perem",$perem,$repl);
$new=str_replace("\$value",$value,$new);
$zapr.=$new;
}
}
// декодирование символов
$zapr=str_replace("%3A",":",$zapr);
$zapr=str_replace("%40","@",$zapr);
return $zapr;
}
прошу прощения, форматирование сохранить не удалось.
 
Зверху