簡體   English   中英

使用 Python 子進程運行 Charles Headless - 傳入命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM