版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Thinkcortex/article/details/85162049
版本:browsermob-proxy 0.8.0
使用:
from browsermobproxy import Server
BROWSERMOBPROXY = "/usr/local/browsermob-proxy-2.1.4/bin/browsermob-proxy"
server = Server( BROWSERMOBPROXY )
......
(其他代码省略)
看一下Server 类中的部分代码:
def stop(self):
"""
This will stop the process running the proxy
"""
if self.process.poll() is not None:
return
try:
self.process.kill()
self.process.wait()
except AttributeError:
# kill may not be available under windows environment
pass
self.log_file.close()
start() 关键部分:
self.process = subprocess.Popen(self.command,
stdout=self.log_file,
stderr=subprocess.STDOUT)
再来看 browsermob-proxy
[root@localhost ~]# ll /usr/local/browsermob-proxy-2.1.4/bin/browsermob-proxy
-rwxr-xr-x 1 root root 781 3月 23 2018 /usr/local/browsermob-proxy-2.1.4/bin/browsermob-proxy
[root@localhost ~]#
[root@localhost ~]# cat /usr/local/browsermob-proxy-2.1.4/bin/browsermob-proxy
#!/bin/sh
BASEDIR=`dirname $0`/..
BASEDIR=`(cd "$BASEDIR"; pwd)`
# if user has not explicitly set a command to use to invoke java, use 'java' and assume it is on the path
if [ -z "$JAVACMD" ]
then
JAVACMD="java"
fi
"$JAVACMD" $JAVA_OPTS \
-Dapp.name="browsermob-proxy" \
-Dbasedir="$BASEDIR" \
-jar "$BASEDIR/lib/browsermob-dist-2.1.4.jar" \
"$@"
# if we couldn't find java, print a helpful error message
if [ $? -eq 127 ]
then
echo
echo "Unable to run java using command: $JAVACMD"
echo "Make sure java is installed and on the path, or set JAVACMD to the java executable before running this script."
echo
echo "Example:"
echo
echo " $ JAVACMD=/var/lib/jdk/bin/java ./browsermob-proxy"
echo
fi
[root@localhost ~]#
browsermob-proxy不是二进制程序。启动server,参数传入的是脚本,脚本执行完毕, 进程退出, 剩下的是Java子进程。 此时调用server.stop(), 无法停止。
解决:
class myServer(Server):
def __init__(self, path='browsermob-proxy', options=None):
#Server.__init__(path, options)
options = options if options is not None else {}
self.path = path
self.host = 'localhost'
self.port = options.get('port', 8080)
self.process = None
self.command = []
self.command += ["java", "-Dapp.name=browsermob-proxy", "-Dbasedir=/usr/local/browsermob-proxy-2.1.4", "-jar", "/usr/local/browsermob-proxy-2.1.4/lib/browsermob-dist-2.1.4.jar", '--port=%s' % self.port]
def get_process_pid(self):
return self.process.pid