Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 我有一个瓶子。无论谁使用这个api,我都应该通过使用flask和python跟踪他们的ip地址来限制他们的调用_Python 3.x_Flask - Fatal编程技术网

Python 3.x 我有一个瓶子。无论谁使用这个api,我都应该通过使用flask和python跟踪他们的ip地址来限制他们的调用

Python 3.x 我有一个瓶子。无论谁使用这个api,我都应该通过使用flask和python跟踪他们的ip地址来限制他们的调用,python-3.x,flask,Python 3.x,Flask,我有一个API,无论谁点击这个API,我都应该通过跟踪他们的IP地址来限制他们的调用。如果一个用户第二次点击我的API,我应该减少他们的调用。他们可以从手机或系统上点击我的API。使用flask和python,请给我任何建议或教程。提前谢谢 我尝试了这个代码,但我只能跟踪他们的公共IP,我希望他们的本地IP和公共IP @app.route('/api.text-services/sentiment', methods=['GET']) @cross_origin() def Demoapi():

我有一个API,无论谁点击这个API,我都应该通过跟踪他们的IP地址来限制他们的调用。如果一个用户第二次点击我的API,我应该减少他们的调用。他们可以从手机或系统上点击我的API。使用flask和python,请给我任何建议或教程。提前谢谢

我尝试了这个代码,但我只能跟踪他们的公共IP,我希望他们的本地IP和公共IP

@app.route('/api.text-services/sentiment', methods=['GET'])
@cross_origin()
def Demoapi():
     ipaddress=request.remote_addr

Result:106.XX.XX.XX(Public IP)

app.wsgi_app = ProxyFix(app.wsgi_app)
@app.route('/api.text-services/sentiment', methods=['GET'])
@cross_origin()
def Demoapi():

    ipaddress=request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
结果:106.XX.XX.XX(公共IP)

结果:106.XX.XX.XX(公共IP)


我希望使用flask和python得到的结果是106.XX.XX.XX(公共IP)_10.0.XX.XXX(本地IP)。用户从哪个系统点击我的API,我应该能够使用flask和python跟踪该系统的公共IP和本地IP。

您试图实现的是速率限制视图。您可以使用不同的方法对视图进行分级限制

  • 我更喜欢的一种方法是编写一个decorator函数,该函数将在后台使用Redis来保持每个客户端的调用计数。检查Flask社区的代码片段/教程

  • 第二个选项是使用扩展,它基本上实现了第一个选项作为扩展,使生活变得简单

  • 作为第三种选择,您可以在基础架构级别实施速率限制。如果您打算使用Microsoft Azure或AWS托管您的应用程序,它们提供的服务称为Azure API管理和AWS API网关,该网关具有速率限制功能


  • 当然,可能还有其他方法来设置Flask路由的调用限制,但这些是我到目前为止遇到的最常见的方法。希望这有帮助。

    谢谢,实际上,我正在限制呼叫,但我无法同时跟踪公共IP和本地IP地址。我只能跟踪公共IP地址。我想通过跟踪不同用户的IP地址来识别他们的点击率。例如:五个成员使用相同的网络但不同的系统,我应该知道哪个请求来自哪个系统跟踪它们的公共和私有IP地址。如果您在公共internet上运行应用程序,使用IP限制速率实际上是错误的。最好考虑实现客户端API密钥和基于密钥的限制。例如,查看twitterapi。即使您可以获得用户的私有IP(我相信除非您拥有网络,否则这是不可能的),您仍然会有重复的地址。私有IP地址是从预定义的A类、B类和C类地址集中选择的。因此,几乎可以肯定的是,几个用户的私有IP为192.168.0.1或10.0.0.5。
    @app.route('/api.text-services/sentiment', methods=['GET'])
    @cross_origin()
    def Demoapi():
        ipaddress=origin=request.headers.get('X-Forwarded-For', request.remote_addr)