невозможно отправить POST-запрос на сервер Heroku, используя python запросов - PullRequest
0 голосов
/ 30 апреля 2020

Итак, я пытаюсь отправить запрос с посторонней программой на мой сайт. это работало хорошо в localhost, но теперь, когда мой сервер размещен на Heroku, это не так. Я использую requests module

req_id = requests.post('http://admin-monitor.herokuapp.com/computers/verify_login',
                                   json={"MAC address: ": computer_mac_address()})

, конечно, у меня есть дескриптор для этого URL на моем сервере. когда я заглянул в свои журналы, я увидел 500 error без причины

"POST /computers/verify_login HTTP/1.1" 500 290 "-" "python-requests/2.23.0"

Я сомневаюсь, что это поможет вам, но на всякий случай это обработчик для запроса

app.route('/computers/verify_login', methods=['POST', 'GET'])
def check_if_user_exists():
    if request.method == 'POST':
        global new_mac_address
        js = request.get_json()
        print(js)
        if js is not None:
            for mac_address in js.values():
                for i in range(len(Todo.query.all())):
                    if mac_address == Todo.query.filter(Todo.id).all()[i].mac_address:
                        print("True!")
                        return str(Todo.query.filter(Todo.id).all()[i].id)
                new_mac_address = mac_address
                print("Not found!")
                return redirect('/computers/add')
        else:
            print("Empty? wtf")
    else:   
        return ""

2020-04-30T16:42:25.103580+00:00 app[web.1]: [2020-04-30 16:42:25,102] ERROR in app: Exception on /computers/verify_login [POST]
2020-04-30T16:42:25.103581+00:00 app[web.1]: Traceback (most recent call last):
2020-04-30T16:42:25.103584+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1247, in _execute_context
2020-04-30T16:42:25.103584+00:00 app[web.1]: self.dialect.do_execute(
2020-04-30T16:42:25.103585+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 590, in do_execute
2020-04-30T16:42:25.103586+00:00 app[web.1]: cursor.execute(statement, parameters)
2020-04-30T16:42:25.103586+00:00 app[web.1]: psycopg2.errors.DatatypeMismatch: argument of WHERE must be type boolean, not type integer
2020-04-30T16:42:25.103586+00:00 app[web.1]: LINE 3: WHERE todo.id
2020-04-30T16:42:25.103587+00:00 app[web.1]: ^
2020-04-30T16:42:25.103588+00:00 app[web.1]:
2020-04-30T16:42:25.103588+00:00 app[web.1]:
2020-04-30T16:42:25.103589+00:00 app[web.1]: The above exception was the direct cause of the following exception:
2020-04-30T16:42:25.103589+00:00 app[web.1]:
2020-04-30T16:42:25.103589+00:00 app[web.1]: Traceback (most recent call last):
2020-04-30T16:42:25.103590+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
2020-04-30T16:42:25.103590+00:00 app[web.1]: response = self.full_dispatch_request()
2020-04-30T16:42:25.103591+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
2020-04-30T16:42:25.103591+00:00 app[web.1]: rv = self.handle_user_exception(e)
2020-04-30T16:42:25.103592+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
2020-04-30T16:42:25.103592+00:00 app[web.1]: reraise(exc_type, exc_value, tb)
2020-04-30T16:42:25.103593+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
2020-04-30T16:42:25.103593+00:00 app[web.1]: raise value
2020-04-30T16:42:25.103593+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
2020-04-30T16:42:25.103594+00:00 app[web.1]: rv = self.dispatch_request()
2020-04-30T16:42:25.103594+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
2020-04-30T16:42:25.103595+00:00 app[web.1]: return self.view_functions[rule.endpoint](**req.view_args)
2020-04-30T16:42:25.103595+00:00 app[web.1]: File "/app/Server.py", line 115, in check_if_user_exists
2020-04-30T16:42:25.103595+00:00 app[web.1]: if mac_address == Todo.query.filter(Todo.id).all()[i].mac_address:
2020-04-30T16:42:25.103596+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3246, in all
2020-04-30T16:42:25.103596+00:00 app[web.1]: return list(self)
2020-04-30T16:42:25.103597+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3405, in __iter__
2020-04-30T16:42:25.103597+00:00 app[web.1]: return self._execute_and_instances(context)
2020-04-30T16:42:25.103598+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3430, in _execute_and_instances
2020-04-30T16:42:25.103598+00:00 app[web.1]: result = conn.execute(querycontext.statement, self._params)
2020-04-30T16:42:25.103599+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 984, in execute
2020-04-30T16:42:25.103599+00:00 app[web.1]: return meth(self, multiparams, params)
2020-04-30T16:42:25.103599+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 293, in _execute_on_connection
2020-04-30T16:42:25.103600+00:00 app[web.1]: return connection._execute_clauseelement(self, multiparams, params)
2020-04-30T16:42:25.103600+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1097, in _execute_clauseelement
2020-04-30T16:42:25.103601+00:00 app[web.1]: ret = self._execute_context(
2020-04-30T16:42:25.103601+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1287, in _execute_context
2020-04-30T16:42:25.103602+00:00 app[web.1]: self._handle_dbapi_exception(
2020-04-30T16:42:25.103602+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1481, in _handle_dbapi_exception
2020-04-30T16:42:25.103602+00:00 app[web.1]: util.raise_(
2020-04-30T16:42:25.103603+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
2020-04-30T16:42:25.103603+00:00 app[web.1]: raise exception
2020-04-30T16:42:25.103604+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1247, in _execute_context
2020-04-30T16:42:25.103604+00:00 app[web.1]: self.dialect.do_execute(
2020-04-30T16:42:25.103605+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 590, in do_execute
2020-04-30T16:42:25.103605+00:00 app[web.1]: cursor.execute(statement, parameters)
2020-04-30T16:42:25.103605+00:00 app[web.1]: sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DatatypeMismatch) argument of WHERE must be type boolean, not type integer
2020-04-30T16:42:25.103606+00:00 app[web.1]: LINE 3: WHERE todo.id
2020-04-30T16:42:25.103606+00:00 app[web.1]: ^
2020-04-30T16:42:25.103606+00:00 app[web.1]:
2020-04-30T16:42:25.103608+00:00 app[web.1]: [SQL: SELECT todo.id AS todo_id, todo.mac_address AS todo_mac_address, todo.cpu_type AS todo_cpu_type, todo.ram_usage AS todo_ram_usage, todo.running_processes AS todo_running_processes, todo.cpu_usage_procentage AS todo_cpu_usage_procentage, todo.memory_usage_procentage AS todo_memory_usage_procentage
2020-04-30T16:42:25.103608+00:00 app[web.1]: FROM todo
2020-04-30T16:42:25.103609+00:00 app[web.1]: WHERE todo.id]
2020-04-30T16:42:25.103609+00:00 app[web.1]: (Background on this error at: http://sqlalche.me/e/f405)
2020-04-30T16:42:25.105596+00:00 app[web.1]: 10.15.186.69 - - [30/Apr/2020:16:42:25 +0000] "POST /computers/verify_login HTTP/1.1" 500 290 "-" "python-requests/2.23.0"
2020-04-30T16:42:25.318355+00:00 app[web.1]: [2020-04-30 16:42:25,317] ERROR in app: Exception on /computers/1 [POST]
2020-04-30T16:42:25.318357+00:00 app[web.1]: Traceback (most recent call last):
2020-04-30T16:42:25.318358+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
2020-04-30T16:42:25.318358+00:00 app[web.1]: response = self.full_dispatch_request()
2020-04-30T16:42:25.318359+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
2020-04-30T16:42:25.318359+00:00 app[web.1]: rv = self.handle_user_exception(e)
2020-04-30T16:42:25.318360+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
2020-04-30T16:42:25.318360+00:00 app[web.1]: reraise(exc_type, exc_value, tb)
2020-04-30T16:42:25.318360+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
2020-04-30T16:42:25.318361+00:00 app[web.1]: raise value
2020-04-30T16:42:25.318361+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
2020-04-30T16:42:25.318362+00:00 app[web.1]: rv = self.dispatch_request()
2020-04-30T16:42:25.318362+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
2020-04-30T16:42:25.318362+00:00 app[web.1]: return self.view_functions[rule.endpoint](**req.view_args)
2020-04-30T16:42:25.318363+00:00 app[web.1]: File "/app/Server.py", line 208, in no_one_in_db
2020-04-30T16:42:25.318363+00:00 app[web.1]: print(current_user.allow_to_view_level_2)
2020-04-30T16:42:25.318363+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/werkzeug/local.py", line 347, in __getattr__
2020-04-30T16:42:25.318364+00:00 app[web.1]: return getattr(self._get_current_object(), name)
2020-04-30T16:42:25.318364+00:00 app[web.1]: AttributeError: 'AnonymousUserMixin' object has no attribute 'allow_to_view_level_2'

1 Ответ

1 голос
/ 30 апреля 2020

Я бы изменил запрос POST на:

req_id = requests.post('http://admin-monitor.herokuapp.com/computers/verify_login',
                               json={"mac_address": computer_mac_address()})

Затем на сервере вы должны извлечь адрес ma c из json. Поэтому я бы заменил:

for mac_address in js.values():

на

mac_address = js['mac_address']

После того, как вы разместили журнал ошибок, я вижу, что произошла ошибка базы данных. Существует некоторое несоответствие типов данных, возможно, со столбцом id в таблице todo. Это должно быть целое число.

...