2017-09-26 75 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_(任何人都可以修改反作弊应用程序)。 –