2017-09-26 74 views
0

因爲這是建議我在早期post做,做一個公共api的Web服務器。基本上我想做一個應用程序,將在Windows上運行,並將從API獲取數據。Python與燒瓶,連接到api

from flask import Flask, render_template, request import sqlite3 as sql 

app = Flask(__name__) 

files_from_database = [] 
@app.route('/') 
def getdata(): 
    con = sql.connect("AntiCheat.db") 
    con.row_factory = sql.Row 

    cur = con.cursor() 
    cur.execute("select filename from files") 

    rows = cur.fetchall(); 
    for row in rows: 
     files_from_database.append(row) 
    return render_template("list.html", rows=files_from_database) 


if __name__ == '__main__': 
    app.run(debug=True) 

我只是從現在開始,我不知道正確與否,如果有人可以告訴我,如果我要在正確的道路,或者如果有更好的方式來做到這一點

以及Windows應用程序如何連接到該API並獲取數組的數據?

在此先感謝

回答

1

這是一個良好的開端。我肯定會改變的是返回JSON數據。對於你當前的用例,似乎你只想返回一個文件名列表,所以這應該工作。現在

requests.get('http://127.0.0.1:5000/').json() 

,如果您需要任何更多的從API我強烈建議尋找到了Flask-RESTful包:

import sqlite3 as sql 

from flask import Flask, jsonify 

app = Flask(__name__) 


@app.route('/') 
def get_data(): 
    con = sql.connect("AntiCheat.db") 
    con.row_factory = sql.Row 

    cur = con.cursor() 
    cur.execute("SELECT filename FROM files") 
    rows = cur.fetchall() 

    response = [row['filename'] for row in rows] 
    return jsonify(response) 


if __name__ == '__main__': 
    app.run(debug=True) 

那麼你的客戶端可以獲取來自API的文件名。


還有一點:如果你的應用程序的想法是一個簡單的反作弊,通過尋找從DB客戶端的計算機上的一些文件工作,檢查文件名不會是非常成功的:客戶端可以更改文件名稱或修改合法的遊戲文件,插入惡意代碼,但保留原名稱。

而不是檢查文件名,我會建議您檢查files MD5 checksums。您可以檢查一些核心遊戲文件是否具有預期的校驗和(即它們未被篡改),並且還會查找一些列入黑名單的已知的校驗和

充分利用Python中的文件的校驗和是很容易的:

def file_checksum(file_path): 
    hash_md5 = hashlib.md5() 
    with open(file_path, 'rb') as file: 
     for chunk in iter(lambda: file.read(4096), b''): 
      hash_md5.update(chunk) 
    return hash_md5.hexdigest() 

如果你有UNIX系統,您很可能也將能夠從你的終端做md5 <filename>,你會得到相同的校驗比從python函數。

+0

謝謝你隊友!我會試試 – ShwSvn

+0

它完美的工作,還有一個問題,它可以像「保護」,以便通過瀏覽器訪問網站不顯示文件? – ShwSvn

+0

並非如此,最好的方式是IP白名單,但是您需要它可以從任何一臺計算機(從客戶端應用程序)訪問,所以這不是一種可能性。另一件想到的事情是使用一些祕密(比如帶有API密鑰的HTTP頭),如果你的服務器是HTTPS,那麼你的客戶端應用請求將被加密,並且這個API密鑰將不可見。唯一的問題是,你必須在你的Python客戶端應用程序中包含這個祕密(API密鑰),任何人都可以從那裏讀取它。但無論如何,使用python中的客戶端應用程序將使其輕鬆_crackable_(任何人都可以修改反作弊應用程序)。 –