Mercurial > hg > anonet-resdb
changeset 453:6da2470e59b5 draft
powerfulproxy
author | Nick <nick@somerandomnick.ano> |
---|---|
date | Mon, 28 Mar 2011 17:35:47 +0000 |
parents | c44186580d36 |
children | 650bf2be4249 |
files | doc/www.powerfulproxy.com/public_html/do_it.php |
diffstat | 1 files changed, 107 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/www.powerfulproxy.com/public_html/do_it.php Mon Mar 28 17:35:47 2011 +0000 @@ -0,0 +1,107 @@ +<?php +// Copyright Atiti, 2011 +// Version 0.1-2 + +// Where are we at? +$SERVICEURL = "http://powerfulproxy.com/do_it.php/"; +// Do da request +function get_url($url, $data) { + if (!$url) { + echo "Invalid use!"; + die; + } + $options = array( + CURLOPT_RETURNTRANSFER => true, // return web page + CURLOPT_HEADER => false, // don't return headers + CURLOPT_FOLLOWLOCATION => true, // follow redirects + CURLOPT_ENCODING => "", // handle all encodings + CURLOPT_USERAGENT => "AnoNet proxy", // who am i + CURLOPT_AUTOREFERER => true, // set referer on redirect + CURLOPT_CONNECTTIMEOUT => 15, // timeout on connect + CURLOPT_TIMEOUT => 28, // timeout on response + CURLOPT_MAXREDIRS => 10, // stop after 10 redirects + CURLOPT_FAILONERROR => true, +// CURLOPT_PROXY => "http://b.polipo.srn.ano:8000/", + ); + $ch = curl_init ($url); + curl_setopt_array( $ch, $options ); + $fields_string = ""; + if (count($data)) { + foreach($data as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } + rtrim($fields_string,'&'); + curl_setopt($ch, CURLOPT_POST, count($data)); + curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); + } + $ret = curl_exec ($ch); + if ($error = curl_error($ch)) + echo 'ERROR: ',$error; + $info = curl_getinfo($ch); + return array("data"=>$ret,"info"=>$info); +} +// Rewrite relative paths +function rewriteRelative($html, $base) { + $server = preg_replace('@^([^\:]*)://([^/*]*)(/|$).*@', '\1://\2/', $base); + $html = preg_replace('@\<([^>]*) (href|src)="/([^"]*)"@i', '<\1 \2="' . $server . '\3"', $html); + $html = preg_replace('@\<([^>]*) (href|src)="(([^\:"])*|([^"]*:[^/"].*))"@i', '<\1 \2="' . $base . '\3"', $html); + return $html; +} +if (isset($_SERVER["PATH_INFO"])) + $p = $_SERVER["PATH_INFO"]; +if (isset($_SERVER["QUERY_STRING"])) + $q = $_SERVER["QUERY_STRING"]; +$postdata = $_POST; +$pall = explode("/", $p); +if (count($pall) <= 1) { + echo "Wrong host format? or smtg."; + die; +} +$proto = $pall[1]; +$host = $pall[2]; +unset($pall[0]); +unset($pall[1]); +unset($pall[2]); +$path = implode("/", $pall); +// Figure out relative paths +$pi = pathinfo($path); +if ($pi) { + $rp = @$pi["dirname"]; +} else + $rp = ""; +if (!$rp) + $rp = $path; +// Construct request url +$geturl = $proto."://".$host."/".$path; +if ($q) + $geturl .= "?".$q; // Append query string + +$d = get_url($geturl, $postdata); +$data = $d["data"]; +$ct = $d["info"]["content_type"]; +$ct_s = explode(";", $ct); +$found = false; +$match_ct = array("text/html", "text/xml", "text/plain"); +foreach($match_ct as $m) { + if ($ct_s[0] == $m) + $found = true; +} +if ($found) { // Only rewrite for proper content + $ret = rewriteRelative($data, $proto."://".$host."/".$rp."/"); + $ret = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', $SERVICEURL.str_replace("http://", "http/", "$1"), $ret); + $ret = str_replace(".php/http://", ".php/http/", $ret); + $ret = str_replace(".php/https://", ".php/https/", $ret); + + $ret = str_replace("../", "", $ret); + $items = Array("/src='\/(.*)'/", "/src=\"\/(.*)\"/", "/href='\/(.*)'/", "/href=\"\/(.*)\"/"); + $ret = preg_replace($items, "src='".$SERVICEURL.$proto."/".$host."/$1'", $ret); + $ret = preg_replace("/action=\"\/\"/i", "action=\"".$SERVICEURL.$proto."/".$host."/\"", $ret); + +} else + $ret = ""; +// Output da shit +header("Content-Type: ".$ct); +if (strlen($ret) == 0) + echo $data; +else + echo $ret; + +?>