Skip to content

Instantly share code, notes, and snippets.

@longern
Created February 8, 2023 01:23
Show Gist options
  • Save longern/b485d27e9489ef1f8fcacd7727156680 to your computer and use it in GitHub Desktop.
Save longern/b485d27e9489ef1f8fcacd7727156680 to your computer and use it in GitHub Desktop.
import base64
import json
import urllib.request
def new_response(body=None, status=200, headers=None):
return {
'statusCode': status,
'headers': headers,
'body': body,
}
def lambda_handler(event, context):
try:
url = event["queryStringParameters"]["url"]
headers = event["headers"]
method = event["requestContext"]["http"]["method"]
b64body = event.get("body")
except KeyError:
return new_response(json.dumps(event), status=400)
WHITELIST_HEADERS = {"location", "retry-after", "link", "authorization"}
headers = {
key: value
for key, value in headers.items()
if key.lower() in WHITELIST_HEADERS
}
if b64body is not None:
body = base64.b64decode(b64body)
if len(body) >= 40960:
return new_response("Request Entity Too Large", status=413)
else:
body = None
try:
request = urllib.request.Request(url, data=body, headers=headers, method=method)
response = urllib.request.urlopen(request)
response_headers = {
key: value
for key, value in response.headers.items()
if key.lower() in WHITELIST_HEADERS
}
return {
'statusCode': response.status,
'headers': response_headers,
'body': response.read()
}
except Exception as err:
return new_response(str(err), status=500)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment