天涯乌鸦一般黑,微视短视频平台和快手一样,通过访问分享链接h5就能获取到无水印播放地址。
页面分析
先随便撸一个微视短视频分享链接,就勉强以下面这个为例吧
https://h5.weishi.qq.com/weishi/feed/7aSxScNP21JyavHnY/wsfeed?wxplay=1&id=7aSxScNP21JyavHnY&spid=1579860139695868&qua=v1_and_weishi_6.8.1_588_312025000_d&chid=100081014&pkg=3670&attach=cp_reserves3_1000370011
-
F12打开浏览器控制台,点手机按钮选择使用iphone客户端刷新请求
-
点开network观察请求获取到的数据。发现上面的一个请求返回了video_url字段。显然开发者也是个对编码要求很高的老手,很喜欢见名思义,那不妨撸出来放到浏览器look下,从头看到尾无码高清,是不是很惊喜,至此已经发现目标。
-
重点研究下这个返回无水印视频URL的请求
不难发现采用的是POST请求。撸出来请求地址和request_payload
post 参数和header放到postman 遛一下能完美获取到返回无水印数据。
逐步试一下其他参数基本都不需要,主要一个核心的feedid
字段无误就能正常请求。所以可能这个就类似视频的一个ID吧
接下来我们的目标就是找到这个神秘的ID7aSxScNP21JyavHnY
蓦然回首,好一个家伙居然在分享地址上面,真是得来全不费功夫啊
总结步骤
从微视视频分享链接中通过解析URL获取类似视频ID的字段值,然后post请求
https://h5.qzone.qq.com/webapp/json/weishi/WSH5GetPlayPage?t=0.4185745904612037&g_tk=
加上参数 feedid = 7aSxScNP21JyavHnY
别忘了加上cookie和请求头就完美录到无码播放地址。
PHP代码实现
就是一个辣么简单,一个CURL搞定。下载Guzzle库并引入
composer require guzzlehttp/guzzle
。
require __DIR__.'/vendor/autoload.php';
$url = $_GET['url'] ?? '';
$url = urldecode($url);
$headers = [
'Connection' => 'keep-alive',
'User-Agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Version/12.0 Safari/604.1'
];
$client = new GuzzleHttpClient(['timeout' => $timeout, 'headers' => $headers, 'http_errors' => false,]);
$data = [];
if ($headers) {
$data['headers'] = $headers;
}
$jar = new GuzzleHttpCookieCookieJar;
$data['cookies'] = $jar;
if (!$params) {
$response = $client->request('GET', $url, $data);
} else {
$data ['form_params'] = $params;
$response = $client->request('POST', $url, $data);
}
$body = $response->getBody();
if ($body instanceof Stream) {
$body = $body->getContents();
}
$result = json_decode($body, true);
if ($result['ret'] == 0) {
$video = $result['data']['feeds'][0];
$data['video_src'] = $video['video_url'];
$data['cover_image'] = $video['images'][0]['url'];
return $data;
搜索关注 《一只码》公众号发送 专栏微视
即可获取完整可运行源码