Skip to content

Instantly share code, notes, and snippets.

@erikdubbelboer
Last active August 29, 2015 14:23
Show Gist options
  • Save erikdubbelboer/4dbc5b1b124031a85f94 to your computer and use it in GitHub Desktop.
Save erikdubbelboer/4dbc5b1b124031a85f94 to your computer and use it in GitHub Desktop.
Atomx api proxy
try:
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
from SocketServer import ThreadingMixIn
import urllib2
except ImportError:
from http.server import HTTPServer, BaseHTTPRequestHandler
from socketserver import ThreadingMixIn
from urllib import request
class RequestHandler(BaseHTTPRequestHandler):
def do(self):
try:
if self.command in ['POST', 'PUT']:
data = self.rfile.read(int(self.headers['content-length']))
else:
data = None
r = urllib2.Request('https://api.atomx.com' + self.path, data)
r.get_method = lambda : self.command
for k,v in self.headers.items():
k = k.title()
if k in ['Host']:
continue
r.add_header(k, v)
f = urllib2.urlopen(r)
info = f.info()
response = f.read()
self.send_response(f.getcode())
access_control_allow_origin = False
for i in info.headers:
k, v = i.split(': ', 1)
v = v.strip()
if k in ['Date']:
continue
if k == 'Access-Control-Allow-Origin':
access_control_allow_origin = True
self.send_header(k, 'http://127.0.0.1:8000')
else:
if k == 'Set-Cookie':
v = v.replace('api.atomx.com', 'localhost')
self.send_header(k, v)
if not access_control_allow_origin:
self.send_header('Access-Control-Allow-Origin', 'http://127.0.0.1:8000')
self.end_headers()
self.wfile.write(response)
f.close()
except urllib2.HTTPError as e:
print(str(e))
self.send_response(e.code)
except urllib2.URLError as e:
print(str(e))
self.send_response(500)
self.end_headers()
self.wfile.write(str(e))
return
def do_OPTIONS(self):
self.do()
def do_GET(self):
self.do()
def do_POST(self):
self.do()
def do_HEAD(self):
self.do()
def do_PUT(self):
self.do()
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
'''Handle requests in a separate thread.'''
def main():
try:
server = ThreadedHTTPServer(('', 6542), RequestHandler)
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment