将 ngrok 用于 kik 时仅返回 404

only 404s returned when using ngrok for kik

我正在尝试开发一个 kik 机器人。我使用 ngrok 将我的本地主机隧道连接到 ngrok 服务器。但是,每当我 运行 我的 python 程序并启动 ngrok 服务器并在我的 phone 上向机器人发送消息时,所有 returns 都是 404 错误。这是我的 python 代码

from flask import Flask, request, Response
import os 
from kik import KikApi, Configuration 
from kik.messages import messages_from_json, TextMessage

app = Flask(__name__)
BOT_USERNAME = os.environ.get('BOT_USERNAME') 
BOT_API_KEY =  os.environ.get('BOT_API_KEY') 

kik = KikApi(BOT_USERNAME, BOT_API_KEY)

kik.set_configuration(Configuration(webhook='my_webhook'))

@app.route('/incoming', methods=['POST'])
def incoming():
    if not kik.verify_signature(request.headers.get('X-Kik-Signature'),    request.get_data()):
    return Response(status=403) 

    messages = messages_from_json(request.json['messages'])

    for message in messages:
        if isinstance(message, TextMessage):
            kik.send_messages([
                TextMessage(
                    to=message.from_user,
                    chat_id=message.chat_id,
                    body=message.body
                )
            ])

return Response(status=200)


if __name__ == "__main__":
    app.run(port=8080, debug=True)

基本上,当我 运行 这个文件时,ngrok 和本地主机告诉我“404 未找到”。我按照说明 here 进行了 POST 来设置我的机器人配置。当我检查 kik bot 的 webhook 时,它显示 ngrok url。我还需要做些什么才能以普通用户的身份向机器人发送消息吗?我知道 kik 使用 "X-Kik-Username" 进行身份验证,所以这与它有关吗?

Error messages from ngrok

我想通了。我将代码中的路由从“/incoming”更改为“/”。这允许做出正确的反应。

我在使用带有 404s 的 Django 时遇到了类似的问题,因为在外部平台中指定的 webhook URL 包含在 ngrok 对本地开发服务器的请求中,所以像 http://xyz.ngrok.io/https://xyz.ngrok.io/api/v1/webhooks 这样的东西被用作要求。使用 -host-header 选项为我解决了这个问题:

./ngrok http -host-header=rewrite 127.0.0.1:8000