如何通过PHP获取Twitter短链接指向的真实目标链接
解决Twitter短链接转真实链接的PHP实现方案
问题原因
view-source:是Chrome浏览器专属的协议前缀,PHP的文件读取函数(如file_get_contents)无法识别该协议,因此会抛出文件不存在的错误。直接调用file_get_contents时,PHP默认会自动跟随HTTP重定向,最终获取到的是目标页面(如YouTube)的内容,而非短链接跳转页的源码。
方案一:通过HTTP响应头获取跳转目标(推荐)
Twitter短链接通常通过HTTP 3xx重定向跳转到真实地址,直接读取响应头中的Location字段即可,无需加载页面内容,效率更高。
代码示例
<?php $shortUrl = $_POST['input1']; // 处理链接中的空格或格式问题(示例链接中的空格为输入失误,实际应为https://t.co/hyVassZuxt) $shortUrl = trim(str_replace(' ', '', $shortUrl)); // 获取响应头并追踪重定向 $headers = get_headers($shortUrl, 1); // 提取真实链接:适配单层/多层重定向的情况 if (isset($headers['Location'])) { $realUrl = is_array($headers['Location']) ? end($headers['Location']) : $headers['Location']; echo $realUrl; } else { echo "无法获取真实链接"; } ?>
方案二:获取跳转页源码并解析
若需要获取类似Chrome view-source的跳转页源码,可通过CURL禁止自动跟随重定向,拿到跳转页HTML后再解析其中的跳转逻辑(如meta刷新标签、JavaScript跳转)。
代码示例
<?php $shortUrl = $_POST['input1']; $shortUrl = trim(str_replace(' ', '', $shortUrl)); $ch = curl_init($shortUrl); // 禁止自动跟随重定向 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // 同时获取响应头和内容 curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); // 分离响应头与HTML内容 list($header, $html) = explode("\r\n\r\n", $response, 2); // 输出跳转页源码(对应view-source内容) echo htmlspecialchars($html); // 从源码中解析真实链接:示例匹配meta refresh标签 preg_match('/<meta[^>]+http-equiv="refresh"[^>]+content="\d+;url=(.*?)"/i', $html, $matches); if (!empty($matches[1])) { $realUrl = htmlspecialchars_decode($matches[1]); echo "<br>解析到的真实链接:" . $realUrl; } ?>
适配不同子域名的说明
无论目标链接是www.youtube.com还是m.youtube.com,上述两种方法都会直接获取到短链最终跳转的真实地址,无需额外适配——Twitter短链的重定向目标本身就是对应子域名的真实链接,直接提取即可。
内容的提问来源于stack exchange,提问作者loveearthmix
相关产品推荐
相关产品推荐

