Я создал приложение Flask с конечными точками, готовыми к веб-заездам Dropbox. Веб-крючок Dropbox - это служба, которая вызывает нашу определенную конечную точку API, когда в нашей папке Dropbox происходит какое-то событие (например, загрузка файла). Конфигурация для моего приложения, как показано на следующем рисунке, ясно показывает, что URI webhook включен, то есть URI вызова для Drophok работает правильно (API_KEY, API_SECRET и app.secret_key скрыты здесь).
Далее вы можете увидеть код моего приложения фляги. Проблема в том, что я ожидаю, что вызов / webhook POST будет запускаться каждый раз, когда я загружаю файл в папку Dropbox, но этого не происходит. Знаете ли вы правильный способ исправить это? Спасибо.
# App key and secret from the App console (dropbox.com/developers/apps)
APP_KEY = "XXXXXXXXXXXXX"
APP_SECRET = "YYYYYYYYYYYYY"
app = Flask(__name__)
app.debug = True
# A random secret used by Flask to encrypt session data cookies
app.secret_key = "zzzzzzzzzzzzz"
def process_user(account):
print("Yeahhhhh")
@app.route('/webhook', methods=['GET'])
def challenge():
'''Respond to the webhook challenge (GET request) by echoing back the challenge parameter.'''
resp = Response(request.args.get('challenge'))
resp.headers['Content-Type'] = 'text/plain'
resp.headers['X-Content-Type-Options'] = 'nosniff'
return resp
@app.route('/webhook', methods=['POST'])
def webhook():
'''Receive a list of changed user IDs from Dropbox and process each.'''
# Make sure this is a valid request from Dropbox
signature = request.headers.get('X-Dropbox-Signature').encode("utf-8")
if not hmac.compare_digest(signature, hmac.new(APP_SECRET, request.data, sha256).hexdigest()):
abort(403)
for account in json.loads(request.data)['list_folder']['accounts']:
threading.Thread(target=process_user, args=(account,)).start()
return ''
if __name__=='__main__':
app.run(host='0.0.0.0')