Тайм-аут соединения с URL-адресом PAC-сервера ElectronJS Windows Server Proxy - PullRequest
2 голосов
/ 15 октября 2019

Мне нужно установить соединение WebSocket через PAC URL-прокси из приложения Electron, с сервера, который не принимает запросы извне (TCP или HTTP (S)), из-за повышенной безопасности и брандмауэра. Единственное приемлемое решение - это запрос HTTPS (порт 443) с определенным прокси-сервером PAC URL . Я должен читать данные через TCP внутри системы и отправлять их через веб-сокет HTTPS.

Я решил использовать ElectronJS с пакетами NodejS, и все работает до того момента, когда мне нужно подключиться к внешнему серверу WebSocket. Я попытался сделать следующее*, но только в командной строке Chrome. Приложение выбрасывает время ожидания подключения, так как кажется, что оно не использует те же настройки WebSocket, что и Chrome

const { app, BrowserWindow} = require('electron')
app.commandLine.appendSwitch('proxy-pac-url', 'http://someURL.com:9001/proxy.pac')
var wsUri = "wss://echo.websocket.org/";
var websocket = new WebSocket(wsUri); //works in Chrome, not in the code
  • Пример веб-сокета из https-proxy-agent Сбой с ошибкой, содержащей объект неожиданный (не содержит логических причин)
this.proxyHost = 'http://someURL.com:9001/proxy.pac'
log.info('Is client ' + this.name + ' already connected: ' + this.isConnected)
  if (!this.isConnected) {
    let wsEndpoint = `ws://${this.host}:${this.port}?auth=${this.auth}`
    if (this.port == '443') {
      wsEndpoint = `wss://${this.host}:${this.port}?auth=${this.auth}`
    }

    if (this.proxyHost) {
      const options = url.parse(this.proxyHost)
      const agent = new HttpsProxyAgent(options)
      this.socket = new WebSocket(wsEndpoint, '', { agent: agent })
      log.info('Connecting client ' + wsEndpoint + ' via proxy: ' + this.proxyHost)
    } else {
      this.socket = new WebSocket(wsEndpoint)
      log.info('Connecting client ' + wsEndpoint)
    }

    return true
  }
  return false
  • В качестве последнего варианта я попытался использовать встроенную функцию сеанса ses.setProxy(config, callback) найдено по по этой ссылке (см. Код ниже). Я не получаю никаких ошибок, но все равно получаю тайм-аут
this.proxyHost = 'http://someURL.com:9001/proxy.pac'
const { app, BrowserWindow} = require('electron')
var wsUri = "wss://echo.websocket.org/";
var win = new BrowserWindow({//some settings})
win.webContents.session.setProxy(this.proxyHost, function (e) {
    log.info(e);
    log.info('Odlicno')
    return true
  })

Я не понимаю, как это возможно, что все работает через командную строку, но не работает через приложениекод. Я уверен, что использую один и тот же код как в приложении, так и в консоли Chrome

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...