【问题标题】:AttributeError: 'Request' object has no attribute 'is_xhr'AttributeError:“请求”对象没有属性“is_xhr”
【发布时间】:2020-04-02 13:35:28
【问题描述】:

我正在尝试运行 cuckoo api。 Cuckoo web 在我的系统上运行良好。但是当我尝试 cuckoo api 时,我得到了以下错误:

File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1982, in wsgi_app
  response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1614, in full_dispatch_request
  rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1512, in handle_user_exception
  return self.handle_http_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1471, in handle_http_exception
  return handler(e)
File "/usr/local/lib/python2.7/dist-packages/cuckoo/apps/api.py", line 719, in api_auth_required
  401, "Authentication in the form of an "
File "/usr/local/lib/python2.7/dist-packages/cuckoo/apps/api.py", line 36, in json_error
  r = jsonify(message=message)
File "/usr/local/lib/python2.7/dist-packages/flask/json.py", line 251, in jsonify
  if current_app.config['JSONIFY_PRETTYPRINT_REGULAR'] and not request.is_xhr:
File "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 347, in __getattr__
  return getattr(self._get_current_object(), name)

AttributeError: 'Request' object has no attribute 'is_xhr'

2020-04-02 18:50:39,640 [werkzeug] INFO: 192.168.100.94 - - [02/Apr/2020 18:50:39] "GET / HTTP/1.1" 500 -

我尝试通过添加以下代码来更改 api.py:

@app.route("/publish/epoch/end/", methods=['POST'])
def publish():
    #payload = request.form.get('data')
    payload = unquote(request.data.split('=')[1]).replace('+','')
    try:
       `enter code here` data = json.loads(payload)
    except:
        return {'error':'invalid payload'}

    def notify():
        msg = str(time.time())
        for sub in subscriptions[:]:
            sub.put(payload)

    gevent.spawn(notify)
    return "OK"

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        model.save()
        # Failure to return a redirect or render_template
    else:
        return render_template('index.html')

但这对我没有帮助。有什么办法可以解决这个问题?

【问题讨论】:

    标签: python-2.7 flask sandbox cuckoo


    【解决方案1】:

    根据github issue,另一个选项是在您的配置文件中禁用 JSONIFY_PRETTYPRINT_REGULAR。

    class Config:
      # Other configs
      JSONIFY_PRETTYPRINT_REGULAR = False
    

    app = Flask(__name__)
    app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False
    

    【讨论】:

      【解决方案2】:

      request.is_xhr 方法已被弃用和删除,因为它不可靠。请参阅讨论 herehere 了解为什么它被删除。

      在 Cuckoo 更新到更新版本的 Flask 之前,您可能需要将本地版本的 Werkzeug 固定到与 Cuckoo 固定版本的 Flask (example here) 兼容的东西上。

      【讨论】:

      • 非常感谢西默先生。但我对 python 完全陌生。我不知道该怎么做你说的
      • 如果您的应用程序的setup.py 文件中有install_requires = [...] 部分,请将此行添加到括号内:"Werkzeug==0.16"
      【解决方案3】:

      request.is_xhr 属性自 Werkzeug 0.13 起已弃用,并在 Werkzeug 1.0.0 中删除。使用 Flask =1.0.0 时会出现此错误,因为 Flask 在 1.0.0 版本之前的源代码中使用此属性。您只需升级 Flask (>=1.0.0) 即可解决此问题:

      $ pip install -U flask
      

      否则,您也可以将 Werkzeug 降级到 0.16.1:

      $ pip install werkzeug==0.16.1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-12
        • 2014-02-21
        • 2020-06-12
        • 2012-12-01
        • 2021-04-19
        相关资源
        最近更新 更多