Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I am trying to run cuckoo api. Cuckoo web is working fine on my system. But when I tried cuckoo api, I got the following 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 -

I tried to change api.py by adding the following code:

@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')

But that didn't help me. What could be the solution to this issue?

like image 429
Meena Bharti Avatar asked Apr 02 '20 13:04

Meena Bharti


3 Answers

Per this github issue, another option is to disable JSONIFY_PRETTYPRINT_REGULAR in your config file.

class Config:
  # Other configs
  JSONIFY_PRETTYPRINT_REGULAR = False

or

app = Flask(__name__)
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False
like image 69
deesolie Avatar answered Nov 12 '22 20:11

deesolie


The request.is_xhr method has been deprecated & removed, as it was unreliable. See discussion here and here about why it was removed.

You may need to pin your local version of Werkzeug to something that is compatible with Cuckoo's pinned version of Flask (example here) until Cuckoo updates to a newer version of Flask.

like image 9
simmer Avatar answered Nov 12 '22 20:11

simmer


The request.is_xhr property was deprecated since Werkzeug 0.13 and removed in Werkzeug 1.0.0. You will get this error when using Flask <= 0.12.4 and Werkzeug >=1.0.0 because Flask uses this property in the source before the 1.0.0 version. You can just upgrade Flask (>=1.0.0) to fix this issue:

$ pip install -U flask

Otherwise, you can also downgrade Werkzeug to 0.16.1:

$ pip install werkzeug==0.16.1
like image 8
Grey Li Avatar answered Nov 12 '22 19:11

Grey Li