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

如何在无Node环境的虚拟主机上用PHP脚本做React应用服务器?

用PHP中转Behance API解决React跨域问题

我太懂你的困境了——虚拟主机不支持Node.js,没法用Express这类工具做代理,React直接调用Behance API还碰上个CORS错误。别慌,这个PHP中转脚本完全能解决你的问题,我把示例补全并给你讲清楚细节:

<?php
// 处理请求目标:支持单个项目详情或项目列表
$endpoint = isset($_GET['project']) ? "projects/{$_GET['project']}" : 'projects';
// 替换成你自己的Behance API密钥
$api_key = '你的Behance API密钥';
// 拼接完整的Behance API请求地址
$url = "https://api.behance.net/v2/{$endpoint}?client_id={$api_key}";

// 转发React请求里的其他查询参数(比如分页、筛选条件)
if (!empty($_GET)) {
    // 剔除我们已经处理过的project参数
    unset($_GET['project']);
    $url .= '&' . http_build_query($_GET);
}

// 初始化cURL请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 模拟浏览器请求头,避免被API拦截
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: application/json',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]);

// 执行请求并获取响应
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// 捕获cURL请求错误
if (curl_errno($ch)) {
    http_response_code(500);
    echo json_encode(['error' => '请求失败:' . curl_error($ch)]);
    curl_close($ch);
    exit;
}

curl_close($ch);

// 设置CORS响应头,允许React应用访问
header('Access-Control-Allow-Origin: *'); // 开发环境可以用*,生产环境务必替换成你的React域名
header('Access-Control-Allow-Methods: GET');
header('Access-Control-Allow-Headers: Content-Type');
header('Content-Type: application/json');

// 返回Behance API的原始响应
http_response_code($httpCode);
echo $response;
?>

几个关键注意点:

  • API密钥替换:一定要把$api_key的值换成你在Behance开发者平台申请的密钥,不然请求会失败。
  • CORS安全配置:生产环境别用*,把Access-Control-Allow-Origin改成你的React应用实际域名(比如https://your-react-app.com),防止恶意网站滥用你的中转服务。
  • 参数转发支持:脚本会自动把React请求里的额外参数(比如page分页、per_page每页数量)转发给Behance API,完全不影响原有功能。
  • 错误调试:脚本包含了cURL错误捕获和HTTP状态码传递,出现问题时能快速定位原因。

React端调用示例:

想获取单个项目详情就这么写:

fetch('https://你的虚拟主机域名/server.php?project=123456')
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err));

要拉取项目列表直接调用https://你的虚拟主机域名/server.php就行,还能加参数:https://你的虚拟主机域名/server.php?page=2&per_page=10

这样就能完美绕过CORS限制了,纯PHP环境就能搞定,完全不需要Node.js~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:22:17