Я ищу способ написать простой прокси-сервер в колбе для ttyd, который является веб-терминалом с открытым исходным кодом (https://github.com/tsl0922/ttyd).. Самый непосредственный способ - прочитать запрос клиента и ретранслировать его на сервер ttyd. Однако, это терпит неудачу, когда websocket соединяется.
Моя функция просмотра выглядит следующим образом:
@app.route('/')
@app.route('/auth_token.js')
@app.route('/ws')
def ttyd():
if request.path=='/ws':
url = 'ws://192.168.123.172:7681' + request.path
else:
url = 'http://192.168.123.172:7681' + request.path
method = request.method
data = request.data or request.form or None
cookies = request.cookies
headers = request.headers
with closing(
requests.request(method, url, headers=headers, data=data, cookies=cookies)
) as r:
resp_headers = []
for name, value in r.headers.items():
resp_headers.append((name, value))
return Response(r, status=r.status_code, headers=resp_headers)
Как вы можете видеть, функция view будет обрабатывать 3 URL-запроса, первые два успешно выполняются с кодом состояния 200, третье - с кодом состояния 500. Код ошибки на стороне сервера выглядит следующим образом:
request.exceptions.InvalidSchema: Не найдено адаптеров соединения для 'ws: //192.168.123.172: 7681 / ws'
Я также проверяю сеть в двух случаях (с / без прокси). Картинка «без прокси» означает прямой тип «http://192.168.123.172:7681',, это удачно. Изображение «с прокси» означает доступ к ttyd серверу через прокси-флешку. Сбой.
без прокси
с прокси
Так как я новичок в фляге и веб-розетке, я запутался в результате. Прокси-сервер sHTTPe может обрабатывать любой другой http-запрос (например, доступ к google.com), но не удается подключиться через WebSocket.
Спасибо, что сказали мне, почему и как я могу это исправить?