Estoy tratando de ejecutar cuckoo api. Cuckoo web funciona bien en mi sistema. Pero cuando probé cuckoo api, recibí el siguiente error:
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 -Traté de cambiar api.py agregando el siguiente código:
@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')Pero eso no me ayudó. ¿Cuál podría ser la solución a este problema?
La propiedad request.is_xhr quedó obsoleta desde Werkzeug 0.13 y se eliminó en Werkzeug 1.0.0. Obtendrá este error cuando use Flask <= 0.12.4 y Werkzeug >=1.0.0 porque Flask usa esta propiedad en la fuente antes de la versión 1.0.0. Simplemente puede actualizar Flask (> = 1.0.0) para solucionar este problema:
$ pip install -U flaskDe lo contrario, también puede degradar Werkzeug a 0.16.1:
$ pip install werkzeug==0.16.1Según este problema de github , otra opción es deshabilitar JSONIFY_PRETTYPRINT_REGULAR en su archivo de configuración.
class Config: # Other configs JSONIFY_PRETTYPRINT_REGULAR = Falseo
app = Flask(__name__) app.config['JSONIFY_PRETTYPRINT_REGULAR'] = FalseEl método request.is_xhr ha quedado obsoleto y eliminado, ya que no era confiable. Vea la discusión aquí y aquí sobre por qué se eliminó.
Es posible que deba anclar su versión local de Werkzeug a algo que sea compatible con la versión anclada de Flask de Cuckoo ( ejemplo aquí ) hasta que Cuckoo se actualice a una versión más nueva de Flask.