Dan*_*own 6 python subprocess charles-proxy
我正在尝试利用 Charles Proxy 的 Web 界面功能,该功能允许您在无头模式下运行 Charles 并使用 curl 命令控制 Charles 到http://control.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
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用子进程在 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")
Run Code Online (Sandbox Code Playgroud)
“Charles -headless &”中的“&”在这里相关吗?据我了解,“&”允许 Charles 在 shell 中在后台运行。最初打开子进程时是否需要设置 shell=True ?
如果是这样,我如何避免与 shell=True 相关的安全风险?
小智 0
不会Charles -headless返回(因此您在原始 shell 命令中运行它&),因此您需要&在 Python 代码片段的后台运行它。
由于您的子进程已经启动了 shell(命令/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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |