0

0

小红书短链接怎么还原php_提取分享文案中的链接参数【方法】

絕刀狂花

絕刀狂花

发布时间:2025-12-30 15:59:19

|

771人浏览过

|

来源于php中文网

原创

小红书短链(如xhslink.com/abc123)是302跳转,最终指向含笔记ID等参数的完整URL;PHP需用cURL开启CURLOPT_FOLLOWLOCATION并获取CURLINFO_EFFECTIVE_URL才能正确还原。

小红书短链接怎么还原php_提取分享文案中的链接参数【方法】

小红书短链接结构是怎样的?

小红书分享文案里的短链(如 https://xhslink.com/abc123)本质是 302 跳转,最终指向带完整参数的笔记页 URL。直接访问短链会触发重定向,但 PHP 中默认的 file_get_contents()curl_exec() 不会自动跟随跳转,所以拿不到最终 URL —— 这是还原失败最常见的原因。

关键参数藏在跳转后的 URL query string 里,典型结构类似:
https://www.xiaohongshu.com/explore/xxxxxx?xhsshare=xxx&app_platform=android&app_version=8.93.0&share_from_user_hidden=true&xhss=xxx

其中 explore/xxxxxx 后面那段 ID 就是笔记唯一标识符(俗称“笔记ID”),其余如 app_platformshare_from_user_hidden 是渠道或埋点参数,通常可忽略。

用 cURL 获取重定向最终 URL(推荐)

PHP 最可靠的方式是配置 cURL 请求头并启用跳转跟踪,同时只获取响应头(不下载页面内容),提升速度和稳定性。

立即学习PHP免费学习笔记(深入)”;

HaiSnap
HaiSnap

一站式AI应用开发和部署工具

下载
  • 必须设置 CURLOPT_FOLLOWLOCATIONtrue,否则卡在第一次 302
  • 禁用 CURLOPT_RETURNTRANSFER 或配合 CURLOPT_HEADER + CURLOPT_NOBODY,避免拉取整页 HTML
  • 加上 User-Agent,部分短链服务会拦截无 UA 的请求
  • 注意:某些短链可能跳转多次(例如 xhslink → xiaohongshu.com → 带参数的 explore 页面),CURLOPT_MAXREDIRS 建议设为 5
function getRealXHSUrl($shortUrl) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $shortUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); // 不要 body
    curl_setopt($ch, CURLOPT_HEADER, true);           // 只要 header
    curl_setopt($ch, CURLOPT_NOBODY, true);           // 不取 body
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);

    ob_start();
    curl_exec($ch);
    $headers = ob_get_clean();
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $finalUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    curl_close($ch);

    if ($httpCode >= 300 && $httpCode < 400 || $httpCode === 200) {
        return $finalUrl;
    }
    return null;
}

// 示例调用
$real = getRealXHSUrl('https://xhslink.com/ABcDeF');
echo $real; // 输出类似 https://www.xiaohongshu.com/explore/65a1b2c3d4e5f67890123456?xhsshare=...

从最终 URL 提取笔记 ID 和关键参数

得到 https://www.xiaohongshu.com/explore/65a1b2c3d4e5f67890123456?xhsshare=... 后,笔记 ID 就是 explore/ 后面那一串 24 位十六进制字符串(MongoDB ObjectId 格式)。其他参数如 xhsshareshare_from_user_hidden 可用 parse_url() + parse_str() 拆解。

  • 笔记 ID 正则建议用:/\/explore\/([0-9a-f]{24})/i,注意大小写不敏感
  • 不要依赖 parse_url($url, PHP_URL_PATH) 后再 explode,因为路径可能含中文或特殊字符(极少数情况)
  • 如果最终 URL 是 https://www.xiaohongshu.com/discovery/item/...(新版发现页),ID 位置不同,需额外判断
$url = 'https://www.xiaohongshu.com/explore/65a1b2c3d4e5f67890123456?xhsshare=abc123&app_platform=ios';
$matches = [];
if (preg_match('/\/explore\/([0-9a-f]{24})/i', $url, $matches)) {
    $noteId = $matches[1]; // "65a1b2c3d4e5f67890123456"
    
    $parsed = parse_url($url);
    parse_str($parsed['query'], $params);
    $xhsshare = $params['xhsshare'] ?? null; // "abc123"
    $platform = $params['app_platform'] ?? null; // "ios"
}

绕过跳转的替代方案(不推荐但有时有效)

部分小红书短链支持 HEAD 请求直接返回 Location 头,不用走完整 GET 流程。但 xhslink.com 近期已限制 HEAD,多数情况下返回 405 或空 Location —— 所以不能作为主力方案,仅作 fallback。

  • 若 cURL 被墙或超时,可尝试加代理(CURLOPT_PROXY),但需注意代理稳定性
  • 批量处理时务必加延迟(usleep(300000)),高频请求会被封 IP 或返回 429
  • 别用 get_headers():它底层不保证跟随跳转,PHP 版本差异大,行为不可控

真正稳定还原的关键,不是“怎么快”,而是“怎么让服务端把跳转链完整吐出来”。cURL 的 CURLINFO_EFFECTIVE_URL 是目前最接近“真实终点”的 PHP 原生能力。

相关文章

小红书
小红书

小红书是一款集种草分享、生活购物、社交于一体的综合app。小红书汇集了时尚、美容、生活方式、旅行、美食等多个领域的内容,为用户提供了丰富多彩的体验和无限灵感,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1911

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1250

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1156

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1399

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1229

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1439

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号