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;
+
+?>