如何在无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
相关产品推荐
相关产品推荐

