gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:13:44 25 4
gpt4 key购买 nike

我正在尝试利用 Charles Proxy 的 Web 界面功能,该功能允许您在 headless 模式下运行 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

我正在尝试使用 subprocess 在 Python 中重现这些命令。最初,我尝试为上述每个命令打开 3 个不同的子进程,结果发现它们都需要位于同一个 session 中。

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

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 相关的安全风险?

最佳答案

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()

关于python - 使用 Python 子进程运行 Charles Headless - 传递命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59723775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com