使用browsermob代理设置直通?

时间:2019-01-17 00:05:39

标签: python-3.x browsermob-proxy browsermob

因此,我正在使用browsermob代理登录硒测试,以通过IAP for Google Cloud。但这只是使用户进入站点,他们仍然需要使用某些Firebase登录表单登录该站点。 IAP让我通过browsermob添加了Authorization标头,因此您可以访问网站本身,但是当您尝试通过Firebase表单登录时,会收到401错误message: "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential.

我想我可以使用whitelist或黑名单功能来解决此问题,只是不将这些标头应用于与Firebase登录相关的url,但是白名单和黑名单似乎只是返回状态代码和空的呼叫响应匹配正则表达式的

有没有一种方法可以仅基于主机传递某些呼叫?或者说我做错了,让我知道。下面的代码:

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 :(得分:0)

稍后再弄清楚。 BrowserMob代理/客户端没有内置任何功能来执行此操作。但是您可以通过webdriver's proxy settings来实现。

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