прокси фляги для ттыда - PullRequest
0 голосов
/ 07 января 2019

Я ищу способ написать простой прокси-сервер в колбе для 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 серверу через прокси-флешку. Сбой.

без прокси enter image description here

с прокси enter image description here

Так как я новичок в фляге и веб-розетке, я запутался в результате. Прокси-сервер sHTTPe может обрабатывать любой другой http-запрос (например, доступ к google.com), но не удается подключиться через WebSocket.

Спасибо, что сказали мне, почему и как я могу это исправить?

1 Ответ

0 голосов
/ 09 мая 2019

Согласно Websockets в Flask существует проект колб-сокетов на https://github.com/heroku-python/flask-sockets для обслуживания конечной точки веб-розетки в колбе. Чтобы установить внутреннее подключение веб-сокета к серверу, вы не можете использовать запросы, кроме клиента веб-сокета, см. Как отформатировать запрос веб-сокета? .

Когда у меня возникла эта проблема, я решил ее с помощью проекта autobahn-python, см. https://github.com/arska/stringreplacingwebsocketproxy/

Cheers, Aarno

...