diff --git a/examples/proxy.py b/examples/proxy.py
new file mode 100644
index 0000000..b094864
--- /dev/null
+++ b/examples/proxy.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+#
+# This script demostrates how one can use pyOpenSSL to speak SSL over an HTTP
+# proxy
+# The challenge here is to start talking SSL over an already connected socket
+#
+# Author: Mihai Ibanescu <misa@redhat.com>
+#
+# $Id: proxy.py,v 1.2 2004/07/22 12:01:25 martin Exp $
+
+import sys, socket, string
+from OpenSSL import SSL
+
+def usage(exit_code=0):
+    print "Usage: %s server[:port] proxy[:port]" % sys.argv[0]
+    print "  Connects SSL to the specified server (port 443 by default)"
+    print "    using the specified proxy (port 8080 by default)"
+    sys.exit(exit_code)
+
+def main():
+    # Command-line processing
+    if len(sys.argv) != 3:
+        usage(-1)
+
+    server, proxy = sys.argv[1:3]
+
+    run(split_host(server, 443), split_host(proxy, 8080))
+
+def split_host(hostname, default_port=80):
+    a = string.split(hostname, ':', 1)
+    if len(a) == 1:
+        a.append(default_port)
+    return a[0], int(a[1])
+    
+
+# Connects to the server, through the proxy
+def run(server, proxy):
+    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+    try:
+        s.connect(proxy)
+    except socket.error, e:
+        print "Unable to connect to %s:%s %s" % (proxy[0], proxy[1], str(e))
+        sys.exit(-1)
+
+    # Use the CONNECT method to get a connection to the actual server
+    s.send("CONNECT %s:%s HTTP/1.0\n\n" % (server[0], server[1]))
+    print "Proxy response: %s" % string.strip(s.recv(1024))
+
+    ctx = SSL.Context(SSL.SSLv23_METHOD)
+    conn = SSL.Connection(ctx, s)
+
+    # Go to client mode
+    conn.set_connect_state()
+
+    # start using HTTP
+
+    conn.send("HEAD / HTTP/1.0\n\n")
+    print "Sever response:"
+    print "-" * 40
+    while 1:
+        try:
+            buff = conn.recv(4096)
+        except SSL.ZeroReturnError:
+            # we're done
+            break
+
+        print buff,
+
+if __name__ == '__main__':
+    main()
