Last active
August 29, 2015 14:23
-
-
Save erikdubbelboer/4dbc5b1b124031a85f94 to your computer and use it in GitHub Desktop.
Atomx api proxy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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