-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproxy.py
More file actions
56 lines (46 loc) · 1.66 KB
/
Copy pathproxy.py
File metadata and controls
56 lines (46 loc) · 1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import requests
from flask import Flask, request, Response
import urllib.parse
app = Flask(__name__)
WORKER_URL = 'https://proxy-embed.nethriondev.workers.dev'
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'])
def handler(path):
try:
target_url = urllib.parse.urljoin(WORKER_URL, request.full_path)
headers = dict(request.headers)
headers.pop('Host', None)
method = request.method
fetch_options = {
'method': method,
'headers': headers,
'allow_redirects': True
}
if method not in ['GET', 'HEAD']:
fetch_options['data'] = request.get_data()
response = requests.request(
method=method,
url=target_url,
headers=headers,
data=request.get_data() if method not in ['GET', 'HEAD'] else None,
allow_redirects=True
)
response_headers = dict(response.headers)
response_headers['Access-Control-Allow-Origin'] = '*'
response_headers['Access-Control-Expose-Headers'] = '*'
return Response(
response.content,
status=response.status_code,
headers=response_headers
)
except Exception as error:
return Response(
'Bad Gateway: Could not reach upstream',
status=502,
headers={
'Content-Type': 'text/plain',
'Access-Control-Allow-Origin': '*'
}
)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)