Actionscript PyCURL and Socks

In a conclusion to http://www.techshinobi.com/index.php/java-socks-proxy-in-applets-tor/
Here is the same goal achieved using Actionscript and PyCURL this allows us to avoid unnecessary security warnings when displaying images.

package 
{
	
	import flash.display.Sprite;
	import flash.display.Loader;
	
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLLoaderDataFormat;
	
	import flash.geom.Rectangle;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.events.IOErrorEvent;
	
	import flash.utils.ByteArray;
	
	import flash.system.Security;

	
	public class Main extends Sprite 
	{
		Security.loadPolicyFile('http://xx.xx.xxx.xxx/cryaboutit/static/crossdomain.xml');
		Security.allowDomain('xx.xx.xxx.xxx');
		Security.allowDomain('xx.xx.xxx.xxx:8118');
		
		public var loader:URLLoader = new URLLoader();
		public var proxy:String = "http://xx.xx.xxx.xxx/cryaboutit/mab_request?url=";
		
		public function Main():void 
		{
			
			loader.dataFormat = URLLoaderDataFormat.BINARY;
			loader.load(new URLRequest(proxy + "http://123OnionDomain.onion/mabo/static/bike.png"));
			
			loader.addEventListener(IOErrorEvent.IO_ERROR, ioError_handler, false, 0, true);
			loader.addEventListener(ProgressEvent.PROGRESS, loadProgress);
			loader.addEventListener(Event.COMPLETE, loadComplete);
			
		}

		
		public function ioError_handler(e:IOErrorEvent):void
		{
			trace(e.toString());
		}
		
		
		public function loadProgress(e:ProgressEvent):void
		{
			var percentLoaded:Number = Math.round((e.bytesLoaded/e.bytesTotal) * 100);
			trace("Loading: " + percentLoaded + "%");
		}
		
		
		public function loadComplete(e:Event):void
		{
			var img_loader:Loader = new Loader();
			img_loader.loadBytes(loader.data);
			addChild(img_loader);
		}	
	}
}

then using PyCURL/CURL as an interface between actionscript and the Privoxy Server

import pycurl
import cStringIO

def mab_request():
    re_url = str(request.get_vars["url"])
    buf = cStringIO.StringIO()
    c = pycurl.Curl()
    c.setopt(pycurl.URL, str(re_url))
    c.setopt(pycurl.PROXY, "xx.xx.xxx.xxx")
    c.setopt(pycurl.PROXYPORT, 8118)
    c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_HTTP)
    c.setopt(pycurl.HTTPPROXYTUNNEL, 1)
    c.setopt(pycurl.WRITEFUNCTION, buf.write)
    c.perform()
    return buf.getvalue()

The crossdomain.xml policy file

<?xml version="1.0" ?>
<cross-domain-policy>
	<allow-access-from domain="xx.xx.xxx.xxx" />
</cross-domain-policy>

All articles from bottom(start) to top(end)

http://www.techshinobi.com/index.php/actionscript-pycurl-socks-part-3/
http://www.techshinobi.com/index.php/actionscript-pycurl-socks-part-2/
http://www.techshinobi.com/index.php/actionscript-pycurl-and-socks/
http://www.techshinobi.com/index.php/java-socks-proxy-in-applets-tor/