You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django无法接收Roblox游戏POST请求问题求助

解决Roblox POST请求无法被Django接收的问题

一、先确认Django视图的正确性

你的日志只输出“Process working”但无POST数据,大概率是视图没正确获取请求内容。Roblox的HttpService:PostAsync默认会把table转成JSON发送,而非表单格式,直接用request.POST拿不到数据,需针对性解析:

from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
import logging
import json

logger = logging.getLogger(__name__)

@csrf_exempt
def roblox_webhook(request):
    logger.info("Process working")
    if request.method == 'POST':
        # 优先解析JSON格式(Roblox默认发送格式)
        try:
            post_data = json.loads(request.body)
            logger.info(f"Received JSON data: {post_data}")
        except json.JSONDecodeError:
            #  fallback到表单格式
            post_data = request.POST.dict()
            logger.info(f"Received form data: {post_data}")
    return HttpResponse("OK")

二、验证VPS本地服务可用性

先排除外部网络问题,在VPS本地用curl模拟Roblox请求:

  • 模拟JSON请求:
    curl -X POST -H "Content-Type: application/json" -d '{"playerId":12345,"action":"join"}' http://localhost:8000/你的webhook路径/
    
  • 模拟表单请求:
    curl -X POST -d "playerId=12345&action=join" http://localhost:8000/你的webhook路径/
    

查看Django日志,若本地请求能正常输出数据,说明视图没问题,问题出在VPS的外部网络或反向代理配置。

三、检查VPS网络与反向代理配置

  1. 防火墙端口开放:确保VPS的ufw防火墙开放了服务端口(如Nginx的80/443,或Django监听的8000):
    ufw status
    # 若未开放,执行:
    ufw allow 80/tcp
    ufw allow 443/tcp
    
  2. Nginx反向代理配置:如果用Nginx做反向代理,需确保配置正确传递请求体:
    server {
        listen 80;
        server_name 你的域名或公网IP;
    
        location /你的webhook路径/ {
            proxy_pass http://localhost:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            # 关键:保留请求的Content-Type,确保JSON数据被正确传递
            proxy_set_header Content-Type $content_type;
            proxy_pass_request_body on;
        }
    }
    
    修改后重启Nginx:sudo systemctl restart nginx

四、排查pm2运行的Django进程

  1. 检查pm2状态:pm2 status,确认Django进程处于online状态,无异常退出。
  2. 查看pm2日志:pm2 logs 你的进程名,排查是否有端口占用、依赖缺失或启动命令错误。
  3. 确保用生产级服务器运行:禁止用python manage.py runserver上线,必须用gunicorn等生产服务器,pm2启动命令示例:
    pm2 start gunicorn --name "django-roblox" --workers 3 --bind 0.0.0.0:8000 你的项目名.wsgi:application
    

五、Django生产环境配置检查

  1. 确认ALLOWED_HOSTS包含你的域名或VPS公网IP:
    ALLOWED_HOSTS = ['你的域名', 'x.x.x.x']  # x.x.x.x是VPS公网IP
    
  2. 确保日志配置能输出INFO级别的内容,在settings.py中:
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'file': {
                'level': 'INFO',
                'class': 'logging.FileHandler',
                'filename': '/var/log/django/roblox_webhook.log',
            },
        },
        'loggers': {
            '你的app名': {
                'handlers': ['file'],
                'level': 'INFO',
                'propagate': True,
            },
        },
    }
    
    同时要保证日志目录存在且有写入权限:
    sudo mkdir -p /var/log/django
    sudo chown www-data:www-data /var/log/django
    

内容的提问来源于stack exchange,提问作者Krico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:57:16