Страницы: 1
RSS
VBA. Запрос GET. Определение браузера, VBA. Запрос GET. Определение браузера
 
Здравствуйте, Уважаемые форумчане. Прошу Вашей помощи в решении моей проблемы. После обновления одного из наших локальных серверов я потерял к нему доступ из VBA. Яндекс с гуглом никак мне помочь не хотят)). Проблема в следующем (насколько я понял!):
При выполнении запроса GET, сервер проверят браузер пользователя и если он не списке, не проводит переадресацию в нужное место. Как его обмануть?
Мой запрос:
Код
    Dim XMLHTTP As New WinHttp.WinHttpRequest

    
    XMLHTTP.Open "GET", "http://MySERVER";, False
     XMLHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)"
        'Доменная авторизация
    XMLHTTP.SetAutoLogonPolicy (AutoLogonPolicy_Always)
    XMLHTTP.SetClientCertificate ("CURRENT_USER\Personal")
    'XMLHTTP.Option(WinHttpRequestOption_EnableRedirects) = False
    
XMLHTTP.send

Debug.Print XMLHTTP.responseText
Ответ:
Код
<!DOCTYPE HTML>

<HTML>
<HEAD>
  <meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
  <title>НАЗВАНИЕ</title>
</HEAD>
<body>
<h1>НАЗВАНИЕ</h1>
<strong>Вход</strong>
<form style="display: none" action="servlet/Controller?action=START" method="POST" id="form">
  <input type="hidden" id="bw" name="bw" value=""/>
  <input type="hidden" id="os" name="os" value=""/>
  <input type="hidden" id="ss" name="ss" value=""/>
</form>
<script>
  try {
    var bw = {
      name: 'unknown browser',
      version: '',
      compat: false
    };
    try {
      (function () {
        var ua = navigator.userAgent, tok;
        if (ua == null)
          return;
        // firstly, check ie in compat. mode
        var M = ua.match(/\bMSIE\s+7\.0;.*\bTrident\/(\d+)\.0/) || [];
        if (/trident/i.test(M[0])) {
          bw.name = 'IE';
          bw.compat = true;
          switch (M[1]) {
            case '4':
              bw.version = '8';
              break;
            case '5':
              bw.version = '9';
              break;
            case '6':
              bw.version = '10';
              break;
            case '7':
              bw.version = '11';
              break;
          }
          return;
        }
        // next, do universal check for all browsers
        M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
        if (/trident/i.test(M[1])) {
          tok = /\brv[ :]+(\d+)/g.exec(ua) || [];
          bw.name = 'IE';
          bw.version = tok[1] || '';
          return;
        }
        if (M[1] === 'Chrome') {
          tok = ua.match(/\bOPR\/(\d+)/);
          if (tok != null) {
            bw.name = 'Opera';
            bw.version = tok[1];
            return;
          }
        }
        M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
        if ((tok = ua.match(/version\/(\d+)/i)) != null) {
          M.splice(1, 1, tok[1]);
        }
        bw.name = M[0];
        bw.version = M[1];
      })();
    } catch (e) { bw = null; }
    document.getElementById('bw').value = bw == null ? null : bw.name + ' ' + bw.version + (bw.compat ? ' (Compatibility View)' : '');
    document.getElementById('os').value = navigator ? navigator.platform : 'unavailable';
    document.getElementById('ss').value = screen ? screen.width + 'x' + screen.height : 'unavailable';
  } catch (e) {
    // failed to detect environment
  }
  document.getElementsByTagName('FORM')[0].submit();
</script>
</body>
</html>
 
ну так замените эту строку
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)"
на что-то типа этого:
XMLHTTP.setRequestHeader "User-Agent", "Chrome/103.0.0.0 Safari/537.36"
 
Цитата
написал:
ну так замените эту строку
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)"
на что-то типа этого:
XMLHTTP.setRequestHeader "User-Agent", "Chrome/103.0.0.0 Safari/537.36"
Спасибо :D . Наверное я вопрос неправильно описал...
Конечно же я с этого и начинал, испробовал множество разных вариантов и браузеров. Ничего не изменяется. В итоге остановился на этом пункте (мне так wireshark показал), чтобы не зависеть от куков Браузеров установленных на компьютере.
Есть подозрение что он спрашивает название браузера не у заголовка, а где-то в другом месте. Вот этот параметр и нужно подменить.
 
Спасибо за участие))). Нашел обход
Код
XMLHTTP.Open "POST", "http://MYSERVER/servlet/Controller?action=START";, False
  XMLHTTP.setRequestHeader "bw", "  :IE 11 true (Compatibility View): "
    XMLHTTP.send
Изменено: Денис - 10.08.2022 08:29:38
Страницы: 1
Наверх