2015-11-23 43 views
0

我使用python wrapperbrowsermob proxy,我需要修改服务器响应。但我无法弄清楚我能做到这一点。任何人都可以给我一个有效的代码示例吗?Browsermob代理 - 如何使用response_interceptor修改响应?

文档说我可以给一个JavaScript代码,但它不为我工作:

server = Server(path=SCRIPT_DIR+"/browsermob-proxy/bin/browsermob-proxy", options={"port": 8888}) 
server.start() 
proxy = server.create_proxy() 

proxy.response_interceptor('contents.setTextContents("<html><body>Response successfully intercepted</body></html>")') 

fp = webdriver.FirefoxProfile() 
browser = webdriver.Firefox(firefox_profile=fp, proxy=proxy) 
browser.get("http://example.com") 

谢谢!

回答

0

在browsermobproxy 0.7.1版中,response_interceptor被窃听。你可以去github并获得最新的代码,或者您可以使用此变通,而不是response_interceptor的:

import requests 

url = proxy.host + '/proxy/' + str(proxy.port) + '/filter/response' 
headers={'Content-Type':'text/plain'} 

filter = "contents.setTextContents('<html><body>Response successfully intercepted</body></html>');" 

r = requests.post(url=url, data=filter, headers=headers) 
0

就像一个魅力 - 不过不要忘记设置你的Firefox配置文件的代理;)FP。 set_proxy(proxy.selenium_proxy())

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 
from selenium import webdriver 
from browsermobproxy import Server 
from pprint import pprint 
from time import sleep 
import requests 


server = Server($PATH_GOES_HERE$) 
server.start() 


proxy = server.create_proxy() 

proxy.new_har('test111') 

url = proxy.host + '/proxy/' + str(proxy.port) + '/filter/response' 
headers={'Content-Type':'text/plain'} 

filter = "response.setTextContents('<html><body>Response successfully intercepted</body></html>');" 

r = requests.post(url=url, data=filter, headers=headers) 





fp = webdriver.FirefoxProfile() 
fp.set_proxy(proxy.selenium_proxy()) # <---- you forgot this one here ;) 
browser = webdriver.Firefox(firefox_profile=fp, proxy=proxy) 
sleep(3) 
browser.get("example.com")