[英]Using Python Subprocess to Run Charles Headless - Passing in Commands
我正在嘗試利用 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
我正在嘗試使用子進程在 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 相關的安全風險?
在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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.