0

私はフラスコ レストフルのリクエスト パーサーを使用して、POST リクエスト経由で送信された JSON の引数を解析しています。

Postman ツールを使用している間、リクエストはうまく機能します。ただし、android からリクエストを行うと 500 レスポンスが返されます。

私のリソースクラスは次のとおりです。

class QuestionIgnore(restful.Resource):

    @login_required
    def post(self):
        q_ignore_parser = reqparse.RequestParser()
        q_ignore_parser.add_argument('question_id', type=str, location='json', required=True)

        print request.json

        args = q_ignore_parser.parse_args()
        #do something with the database
        return {'question_id':args['question_id']}

以下は、このリソースに対して完全に有効なリクエストです。

Content-Length: 48
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.4.2; Nexus 4 Build/KOT49H)
Connection: close
Host: myhost.com
X-Forward-For: 111.111.111.111
X-Deviceid: xxxxxxxxxxxxxxxx
X-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
Accept-Encoding: gzip

{"question_id":"somerandomstring123456789"}

postman を使用して API をテストする場合、リクエストは完全に機能しますが、Android アプリケーション内からリクエストを送信すると、サーバーは 500 レスポンス コードを返します。このリクエストが送信されると、次のトレースバックが表示されます。

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 257, in error_router
    return self.handle_error(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 257, in error_router
    return self.handle_error(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 397, in wrapper
    resp = resource(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask/views.py", line 84, in view
    return self.dispatch_request(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 487, in dispatch_request
    resp = meth(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask_login.py", line 764, in decorated_view
    return func(*args, **kwargs)
  File "/home/ubuntu/MY_PROJECT/api/resources.py", line 617, in post
    args = q_ignore_parser.parse_args()
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/reqparse.py", line 212, in parse_args
    namespace[arg.dest or arg.name] = arg.parse(req)
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/reqparse.py", line 131, in parse
    values = [source.get(name)]
AttributeError: 'unicode' object has no attribute 'get'

最初は不正な JSON が原因だと思っていましたが、android から送信された JSON は、郵便配達員の要求と同じように完璧です。コンテンツ タイプ ヘッダーもそのままです。実際、リクエストの形式が正しくない場合、サーバーは 500 ではなく 400 レスポンスを返す必要があります。

これを引き起こしている可能性のあるアイデアはありますか?

4

0 に答える 0