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

如何让Vidhd视频链接请求使用访客IP而非服务器IP?

解决Vidhd视频URL绑定服务器IP的问题

问题分析

Vidhd生成的视频播放URL会和发起请求的IP地址绑定——你用服务器IP请求嵌入页拿到的URL,只能在服务器的IP环境下播放,访客用自己的IP访问自然会触发IP验证失败。要解决这个问题,核心是让获取视频URL的请求使用访客的真实IP,或者绕过IP绑定限制。

下面是三种可行的解决方案,按推荐优先级排序:


方案1:让客户端直接获取视频URL(推荐)

把解析视频URL的逻辑从后端移到前端(访客的浏览器),这样请求Vidhd嵌入页的是访客自己的IP,拿到的URL自然绑定访客IP,完全避免服务器IP的问题。

示例JavaScript代码:

fetch('https://vidhd.net/embed-bc3c7z8e8pmt.html')
  .then(response => response.text())
  .then(html => {
    // 复用你之前的正则表达式匹配视频URL
    const regex = /(https|http)[^"]*(?=",label)/g;
    const matches = html.match(regex);
    
    if (matches) {
      const videoUrls = {};
      if (matches.length >= 1) videoUrls.p720 = matches[0];
      if (matches.length >= 2) videoUrls.p480 = matches[1];
      if (matches.length >= 3) videoUrls.p360 = matches[2];
      
      console.log('获取到视频URL:', videoUrls);
      // 这里可以用拿到的URL初始化播放器
    } else {
      console.error('未找到可用的视频URL');
    }
  })
  .catch(err => console.error('请求嵌入页失败:', err));

⚠️ 注意:如果Vidhd开启了CORS限制,前端直接请求会失败,此时需要用方案2或3。


方案2:PHP后端模拟访客IP请求

用curl替代file_get_contents,在请求Vidhd嵌入页时添加X-Forwarded-For和X-Real-IP头,模拟访客的真实IP。

修改后的PHP代码:

<?php
// 获取访客真实IP(兼容代理场景)
function getVisitorIP() {
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        return explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
    } elseif (!empty($_SERVER['HTTP_X_REAL_IP'])) {
        return $_SERVER['HTTP_X_REAL_IP'];
    }
    return $_SERVER['REMOTE_ADDR'];
}

$visitorIp = getVisitorIP();
$embedUrl = "https://vidhd.net/embed-bc3c7z8e8pmt.html";

// 初始化curl请求
$ch = curl_init($embedUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 添加IP伪装头
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "X-Forwarded-For: $visitorIp",
    "X-Real-IP: $visitorIp"
]);
// 模拟访客浏览器的User-Agent
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

$pageContent = curl_exec($ch);
curl_close($ch);

if ($pageContent === false) {
    echo json_encode(['error' => '请求嵌入页失败']);
    exit;
}

// 复用你原有的正则匹配逻辑
$regex = '/(https|http)[^"]*(?=",label)/';
$TakeJsonToList = [];
if (preg_match_all($regex, $pageContent, $allurlget)) {
    $TakeJsonToList = $allurlget[0];
}

$videoUrls = [];
if (count($TakeJsonToList) >= 1) $videoUrls['p720'] = $TakeJsonToList[0];
if (count($TakeJsonToList) >= 2) $videoUrls['p480'] = $TakeJsonToList[1];
if (count($TakeJsonToList) >= 3) $videoUrls['p360'] = $TakeJsonToList[2];

echo empty($videoUrls) ? json_encode(['error' => 'Url Not Found']) : json_encode($videoUrls);
?>

⚠️ 说明:如果Vidhd直接读取TCP连接的真实IP(而非HTTP头),这种伪装方法会失效,此时只能用方案3。


方案3:PHP作为视频流代理(兜底方案)

如果前两种方法都无效,你可以让服务器作为中间代理:访客请求你的服务器,服务器用自己的IP去拉取Vidhd的视频流,再把流转发给访客。这样访客不需要直接访问Vidhd的绑定URL。

简化版示例代码:

<?php
// 这里填入你从Vidhd拿到的绑定服务器IP的视频URL
$videoUrl = "https://s4.vidhd.net/kmxssvaapjumwmesrlvuyy72hjmxnedreq2ahr5kil6qqt373orzkuun4ccq/v.mp4";

// 初始化curl请求视频流
$ch = curl_init($videoUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// 传递访客的请求头(保证播放兼容性)
foreach (getallheaders() as $name => $value) {
    if ($name !== 'Host') {
        curl_setopt($ch, CURLOPT_HTTPHEADER, ["$name: $value"]);
    }
}

// 设置响应头,让浏览器识别视频流
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
header("Content-Type: $contentType");
header("Content-Length: " . curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD));

// 输出视频流给访客
curl_exec($ch);
curl_close($ch);
?>

⚠️ 注意:这种方法会消耗大量服务器带宽,大流量场景下成本很高,仅作为兜底方案使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:43:34