属性错误:'Request'对象没有属性'is_xhr'。

12

我正在尝试运行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')

但那并没有帮助我。这个问题的解决方案是什么?

3个回答

19
根据这个GitHub问题,另一个选择是在您的配置文件中禁用JSONIFY_PRETTYPRINT_REGULAR。
class Config:
  # Other configs
  JSONIFY_PRETTYPRINT_REGULAR = False

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

10

request.is_xhr 属性自 Werkzeug 0.13 开始被废弃,并在 Werkzeug 1.0.0 版本中被移除。如果您使用 Flask <= 0.12.4 和 Werkzeug >=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

9
< p > request.is_xhr 方法已被弃用并删除,因为它不可靠。请参见此处此处关于为什么删除它的讨论。

您可能需要将本地版本的Werkzeug固定到与Cuckoo的Flask固定版本兼容的版本(示例在这里),直到Cuckoo更新到较新版本的Flask。


非常感谢您,Simmer先生。但是我完全是Python的新手。我不知道如何做您所说的事情。 - Meena Bharti
3
如果你的应用程序的setup.py文件中有一个install_requires = [...]部分,请在括号内添加以下行:"Werkzeug==0.16" - simmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接