使用Python子进程运行Charles Headless-传递命令

问题描述 投票:1回答:1

我正在尝试使用Charles Proxy的Web界面功能,该功能允许您在无头模式下运行Charles,并使用http://control.charles的curl命令控制Charles。

在终端中,当我运行以下命令时,得到了所需的输出:

Charles -headless &
curl -v -x <MY IP ADDRESS HERE> http://control.charles/session/start
curl -o session.chls <MY IP ADDRESS HERE> http://control.charles/session/download

我正在尝试使用子过程在Python中重现这些命令。最初,我尝试为上述每个命令打开3个不同的子进程,只是意识到它们都需要在同一会话中。

这是我的实现,但没有得到任何输出:

charles_init = subprocess.Popen(["/bin/bash"],stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

charles_init.stdin.write(b"Charles -headless")

charles_init.stdin.write(b"curl -v -x <MY IP ADDRESS HERE> http://control.charles/session/start")

charles_init.stdin.write(b"curl -o session.chls <MY IP ADDRESS HERE> http://control.charles/session/download")

“ Charles -headless&”中的“&”是否与此相关?据我了解,“&”允许Charles在Shell中在后台运行。最初打开子流程时是否需要设置shell = True?

如果是,如何避免与shell = True相关的安全风险?

python subprocess charles-proxy
1个回答
0
投票

Charles -headless不返回(因此您在原始Shell命令中使用&运行它,因此您将需要使用&在Python代码段的后台运行它。

由于子进程已经在启动外壳程序(/bin/bash命令,所以shell=True选项无关。

但是,我认为最好的方法是将每个命令作为自己的子进程来运行。例如:

charles = subprocess.Popen(['Charles', '-headless'])  # In background already!
subprocess.run(['curl', '-v', '-x', '<MY IP ADDRESS HERE>', 'http://control.charles/session/start'])
subprocess.run(['curl', '-o', 'session.chls', '<MY IP ADDRESS HERE>', 'http://control.charles/session/download'])
# When done...
charles.kill()
charles.wait()
© www.soinside.com 2019 - 2024. All rights reserved.