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

使用Django框架时如何在AJAX请求时隐藏浏览器网络栏的API请求URL?

解决方案:通过Django后端代理隐藏目标API地址

所有前端直接发起的HTTP请求必然会被浏览器调试工具的网络面板捕获,没有任何前端层面的方案可以隐藏请求的真实目标URL。要实现你的需求,唯一可行的方式是后端代理模式:前端不再直接调用目标第三方API,而是调用你自己Django服务的内部接口,由Django后端代为发起对目标API的请求,再将结果返回给前端。
这种模式下浏览器的网络面板只会展示你Django服务的内部接口路径,完全看不到真实的目标API地址。

第一步:修改前端Ajax代码

替换原请求的目标地址为Django内部接口路径,同时修正原代码的语法错误(token作用域异常、多余逗号、重复data字段问题),修正后的代码如下:

function Approve(camp_id, updated) {
    // 统一处理token和payload,修正原代码作用域问题
    const token = '{{csrf_token}}';
    let payload = updated === 1 ? {'campaign_status': 5} : {'campaign_status': 1};
    payload.camp_id = camp_id;

    $.ajax({
        // 替换为你Django服务的内部代理接口地址
        url: `/api/proxy/campaign-approve/`,
        type: "PUT",
        headers: {
            "X-CSRFToken": token
        },
        contentType: "application/json",
        data: JSON.stringify(payload),
        success: function(response, xhr) {
            window.location.reload();
        },
        error: function(response, xhr) {
            console.log(response)
        }
    });
}

第二步:编写Django代理接口

首先安装网络请求依赖:pip install requests

在Django应用的views.py中添加代理视图:

import json
import requests
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
from django.contrib.auth.decorators import login_required

# 目标API地址写在后端,不会暴露给前端
TARGET_API_URL = "https://api.example.com"
# 目标API需要的授权Token,建议存在Django settings配置文件中
TARGET_API_TOKEN = "你的目标API授权Token"

@login_required
@require_http_methods(["PUT"])
def campaign_approve_proxy(request):
    # 解析前端传的参数
    req_data = json.loads(request.body)
    camp_id = req_data.get("camp_id")
    campaign_status = req_data.get("campaign_status")
    
    # 校验参数合法性
    if not all([camp_id, campaign_status]):
        return JsonResponse({"error": "参数缺失"}, status=400)
    
    # 后端发起对目标API的请求
    try:
        resp = requests.put(
            TARGET_API_URL,
            json={
                "camp_id": camp_id,
                "campaign_status": campaign_status
            },
            headers={
                "Authorization": f"Bearer {TARGET_API_TOKEN}",
                "Content-Type": "application/json"
            },
            timeout=10
        )
        # 将目标API的返回结果透传给前端
        return JsonResponse(resp.json(), status=resp.status_code)
    except requests.exceptions.RequestException as e:
        return JsonResponse({"error": "请求目标接口失败"}, status=500)

在应用的urls.py中配置路由:

from django.urls import path
from . import views

urlpatterns = [
    # 其他现有路径
    path("api/proxy/campaign-approve/", views.campaign_approve_proxy, name="campaign_approve_proxy"),
]

效果说明

修改完成后,浏览器调试工具的网络面板只会显示/api/proxy/campaign-approve/这个你自己的接口路径,真实的https://api.example.com地址完全不会出现在前端任何地方,自然不会被捕获:
浏览器网络面板请求示例

注意事项

  • 不要尝试任何前端加密URL、混淆请求的方案,只要请求是从前端直接发出,最终的请求地址必然会被浏览器捕获,这类方案完全无效
  • 代理接口一定要加权限校验(比如上面的@login_required装饰器),避免未授权用户滥用你的代理接口
  • 目标API的授权Token放在后端配置即可,不要泄露到前端

内容的提问来源于stack exchange,提问作者Muhammad Arsalan Toor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:27:03