簡體   English   中英

通過服務器將字符串發送到python腳本

[英]Send string to python script through server

我如何從Android應用程序向我的PC上的python程序發送字符串(shell腳本文件名),並讓python執行在所述字符串中命名的腳本?

我已經完成了python腳本... doThis(./ openNetflix)將運行./openNetflix腳本,正如您可能猜到的那樣,它將打開Netflix。

如何配置python服務器以接收字符串並將其傳遞給我的doThis(scriptNameString)函數?

我開始就這種情況寫一些冗長的評論,但是當您接近注釋的字符數限制時,將其轉換為答案是一件好事,我猜!

執行此任務的最簡單方法是使用許多優秀的python庫之一來創建REST服務。 我個人最喜歡的是bottle ,而用bottle實現這種服務很簡單:

from bottle import route, run, template

@route('/execute/<command>')
def execute(command):
    if command == "list_blogs":
        // Do something 1
    elif command == "format_c":
        // Do something 2

run(host='localhost', port=79897)

這不僅將為您提供REST服務,而且還將在用戶輸入和實際執行之間架起一道鐵牆,因此用戶輸入將不會與您嘗試執行的文件混在一起。 只要記住永遠不要在if / else之外的任何地方使用命令變量。

如您所見,這有一個弱點-擁有此鏈接的任何人都可以調用這些功能,並可能導致拒絕服務,甚至可能造成實際損壞。 這就是為什么最好擁有某種控制和增強的安全性,以便知道該請求是從有效客戶端發出的。 有許多方法可以解決此問題,我強烈建議您對可用的方法進行更深入的了解。 非常簡單的一個方法是在服務器上存儲密鑰和鹽的字典,例如:

salts["here_you_put_random_hash_as_key"] = "and_here_the_salt"

然后,您還將特定客戶的鹽和密鑰存儲在客戶代碼中。 然后,當客戶發出請求時,他將自己的密鑰和校驗和(包括從命令中獲得的md5,客戶鹽鍵以及例如當前時間)作為附加參數。 然后,當您收到請求和所有3個變量時,您嘗試使用相同的數據創建自己的校驗和(因此,請為提供的客戶端密鑰選擇鹽,並為該鹽,當前時間和來自客戶端的命令計算md5),如果它們匹配,則說明請求有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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