Установить проход через прокси-сервер browsermob? - PullRequest
0 голосов
/ 17 января 2019

Поэтому я использую прокси-сервер browsermob для входа в тесты селена, чтобы пройти IAP для Google Cloud. Но это просто приводит пользователя на сайт, ему все равно нужно войти на сайт, используя некоторую форму входа в систему Firebase. В IAP я добавил заголовок авторизации через browsermob, чтобы вы могли попасть на сам сайт, но когда вы пытаетесь войти через форму firebase, вы получаете ошибку 401 message: "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential..

Я думал, что смогу обойти это, используя функцию белый список или черный список, чтобы просто не применять эти заголовки к URL-адресам, связанным с входом в firebase, но кажется, что белый список и черный список просто возвращают коды состояния и пустые ответы для вызовов, соответствующих регулярному выражению.

Есть ли способ просто выполнять определенные вызовы на основе хоста? Или на случай, если я сделаю что-то не так, дайте мне знать. Код ниже:

class ExampleTest(unittest.TestCase):

    def setUp(self):
        server = Server("env/bin/browsermob-proxy/bin/browsermob-proxy")
        server.start()
        proxy = server.create_proxy()
        bearer_header = {}
        bearer_header['Authorization'] = 'Bearer xxxxxxxxexamplexxxxxxxx'
        proxy.headers({"Authorization": bearer_header["Authorization"]})
        profile  = webdriver.FirefoxProfile()
        proxy_info = proxy.selenium_proxy()
        profile.set_proxy(proxy_info)
        proxy.whitelist('.*googleapis.*, .*google.com.*', 200) # This fakes 200 from urls on regex match
        # proxy.blacklist('.*googleapis.*', 200) # This fakes 200 from urls if not regex match
        self.driver = webdriver.Firefox(firefox_profile=profile)
        proxy.new_har("file-example")


    def test_wait(self):
        self.driver.get("https://example.com/login/")
        time.sleep(3)


    def tearDown(self):
        self.driver.close()

1 Ответ

0 голосов
/ 01 февраля 2019

Понял это чуть позже. Нет ничего встроенного в прокси / клиент BrowserMob для этого. Но вы можете достичь этого через настройки прокси-сервера веб-драйвера .

Chrome

    self.chrome_options = webdriver.ChromeOptions()
    proxy_address = '{}:{}'.format(server.host, proxy.port)
    self.chrome_options.add_argument('--proxy-server=%s' % proxy_address)
    no_proxy_string = ''
    for item in no_proxy:
        no_proxy_string += '*' + item + ';'
    self.chrome_options.add_argument('--proxy-bypass-list=%s' % no_proxy_string)
    self.desired_capabilities = webdriver.DesiredCapabilities.CHROME
    self.desired_capabilities['acceptInsecureCerts'] = True

Firefox

    self.desired_capabilities = webdriver.DesiredCapabilities.FIREFOX
    proxy_address = '{}:{}'.format(server.host, proxy.port)
    self.desired_capabilities['proxy'] = {
        'proxyType': "MANUAL",
        'httpProxy': proxy_address,
        'sslProxy': proxy_address,
        'noProxy': ['google.com', 'example.com']
    }
    self.desired_capabilities['acceptInsecureCerts'] = True
...