I’m building a proxy endpoint in Flask that should handle various HTTP methods (GET, POST, PUT, DELETE). However, I’m encountering two errors when I send requests:
- 408 Error (youtube.com):
408. That’s an error.
Your client has taken too long to issue its request. That’s all we know.
- 405 Error (google.com):
405. That’s an error.
The request method POST is inappropriate for the URL /. That’s all we know.
Here is my code:
from flask import Flask, request, render_template, Response
from urllib.parse import urlparse
from http.client import HTTPConnection
app = Flask(__name__)
@app.route('/iproxy', methods=['GET', 'POST', 'PUT', 'DELETE'])
def iproxy():
try:
url = request.form.get('inputData')
except:
return render_template('denied.html')
parsed_url = urlparse(f'http://{url}')
conn = HTTPConnection(parsed_url.netloc)
path = parsed_url.path
if parsed_url.query:
path += '?' + parsed_url.query
method = request.method
body = request.get_data() if method in ['POST', 'PUT'] else None
headers = {key: value for key, value in request.headers if key != 'Host'}
conn.request(method, path, body, headers)
res = conn.getresponse()
excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
headers = [(name, value) for name, value in res.getheaders() if name.lower() not in excluded_headers]
response = Response(res.read(), res.status, headers)
conn.close()
return response
if __name__ == '__main__':
app.run(debug=True)