= Python Twisted Examples =

''For current and complete Twisted documentation, please refer to http://twistedmatrix.com/trac/wiki/Documentation''

This page maintained by Jacob [[Mathai]].
 
http://www.jacobmathai.org 

  * [[http://twistedmatrix.com/trac/|Twisted ]] is an open source network framework written entirely in [[http://www.python.org|Python]]. It allows you to create a SMTP, HTTP, proxy and ssh servers (and more) in [[http://www.python.org|Python]] with minimal effort.  Twisted is '''Asynchronous''' and event driven and allows applications to respond to different network connection without the use of traditional threading models.

  * Be sure to download the '''[[http://twistedmatrix.com/trac/Downloads|Twisted 8.2]]''' (main Twisted package), '''[[http://pyopenssl.sourceforge.net/|PyOpenSSL ]]''', and '''[[http://www.amk.ca/python/code/crypto.html|PyCrypto]]''' (cryptographic libraries and primitives for ssh connections) before running these Python Twisted examples.

  * Install the '''ZopeInterface''' that is bundled with the Twisted Sumo download before installing Twisted. (cd ZopeInterface* && python setup.py install)

  * Install '''Twisted'''. (python setup.py install)

  * Install '''PyOpenSSL'''. (make sure you have base '''[[http://www.openssl.org|openssl]]''' installed on the system) If during the PyOpenSSL install, you see any errors about Kerberos header files, try this:

If your OpenSSL ore kerberos header files are not in /usr/include, you may need to supply the -I flag to let the setup script know where to look. The same goes for the libraries of course, use the -L flag. Note that build won't accept these flags, so you have t o run first build_ext and then build! Example:
 
    python setup.py build_ext -I/usr/kerberos/include (or wherever your header files are)

    python setup.py build

    python setup.py install
    

  * Install '''Pycrypto'''. (python setup.py install)

  * Verify that all the package are installed correctly by '''import'''ing '''pyOpenSSL-0.7, twisted,  Crypto''' from a python shell and we are ready to go.

== Simple HTTP Proxy Server (proxy.py) ==
{{{
from twisted.web import proxy, http
from twisted.internet import reactor
from twisted.python import log
import sys
log.startLogging(sys.stdout)
 
class ProxyFactory(http.HTTPFactory):
    protocol = proxy.Proxy
 
reactor.listenTCP(8080, ProxyFactory())
reactor.run()
}}}

  * Execute the above Twisted python example script (python proxy.py) You may see a Deprecation Warning that you can ignore for this example.

{{{
[jacob@tux]$ python proxy.py
/usr/lib/python2.3/site-packages/twisted/web/proxy.py:22: DeprecationWarning: twisted.protocols.http has moved to twisted.web.http. See http://twistedmatrix.com/projects/web.
  from twisted.protocols import http
2005/12/06 21:47 EST [-] Log opened.
2005/12/06 21:47 EST [-] __main__.ProxyFactory starting on 8080
2005/12/06 21:47 EST [-] Starting factory <__main__.ProxyFactory instance at 0xb73577ac>

}}}

  * Connect your internet browser to the proxy server you just created '''(localhost:8080)''' and you have written a '''simple proxy server''' using Python and Twisted.