Python与flask,连接到api

Python与flask,连接到api,python,Python,正如早期建议我做的那样,用一个公共api做一个web服务器。基本上,我想做一个应用程序,将运行在windows上,并将从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("AntiChea

正如早期建议我做的那样,用一个公共api做一个web服务器。基本上,我想做一个应用程序,将运行在windows上,并将从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并获取阵列数据


提前感谢

这是一个好的开始。我肯定会改变的是返回JSON数据。对于您当前的用例,您似乎只想返回一个文件名列表,所以这应该是可行的

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获取文件名:

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

现在,如果您需要API提供更多信息,我强烈建议您查看该包


另一点:如果你的应用程序的想法是一个简单的反欺骗,通过在客户端计算机上的数据库中查找一些文件来工作,那么检查文件名不会非常成功:客户端可以更改文件名或修改合法的游戏文件,插入恶意代码,但保留原始名称

我建议您检查文件名,而不是检查文件名。您可以检查一些核心游戏文件是否具有预期的校验和(即它们没有被篡改),还可以查找一些已知坏文件的黑名单校验和

从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
,并且您将获得与python函数相同的校验和。

谢谢您,伙计!我会尝试它的工作非常完美,还有一个问题,有可能喜欢“保护”,这样通过浏览器访问网站时不会显示文件?不是真的,最好是IP白名单,但你需要它可以从任何人的计算机(从客户端应用程序)访问,所以这是不可能的。我想到的另一件事是使用一些秘密(比如带有API密钥的HTTP头),如果您的服务器是HTTPS,那么您的客户端应用程序请求将被加密,并且该API密钥将不可见。唯一的问题是,您必须在Python客户端应用程序中包含该机密(API密钥),任何人都可以从中读取。但无论如何,使用python的客户端应用程序将使其易于破解(任何人都可以修改反作弊应用程序)。您还可以使用(例如,时间戳+源IP),这将防止用户从浏览器轻松获取数据。但是,这并不是你真正想要的,因为你可以很容易地编写一个小脚本来生成nonce并调用你的API。你能建议我使用其他语言吗?如果是,哪一个?