打开该页面地址,是这样的:

梦一场 - 那英 - QQ音乐

点击页面中的播放按钮,会在新页面的播放器里播放该音乐。在新页面中打开开发者工具的网络探测,重新刷新页面,会发现相关请求如下:

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&jsonpCallback=MusicJsonCallback39355320624659207&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback39355320624659207&uin=0&songmid=000YU69H3N55rZ&filename=C400000YU69H3N55rZ.m4a&guid=328569683

http://dl.stream.qqmusic.qq.com/C400000YU69H3N55rZ.m4a?vkey=927C721D272189FED484EF874A8D646C6B13C20C53277FB99D496DA6804CDF1B64C33A4F049D24FFC4366605DB4755A6E9AB632AA770C09A&guid=328569683&uin=0&fromtag=66

其中,第二个请求就是音频的真实地址,该地址中主要有如下几个部分:

文件名:C400000YU69H3N55rZ.m4a

vkey参数:927C721D272189FED484EF874A8D646C6B13C20C53277FB99D496DA6804CDF1B64C33A4F049D24FFC4366605DB4755A6E9AB632AA770C09A

guid参数:328569683

uin参数:0

fromtag参数:66

第一个请求的响应如下:

MusicJsonCallback39355320624659207({"code":0,"cid":205361747,"data":{"expiration":80400,"items":[{"subcode":0,"songmid":"000YU69H3N55rZ","filename":"C400000YU69H3N55rZ.m4a","vkey":"927C721D272189FED484EF874A8D646C6B13C20C53277FB99D496DA6804CDF1B64C33A4F049D24FFC4366605DB4755A6E9AB632AA770C09A"}]}})

我们发现,vkey参数值就在上述响应内容里面。songmid的值正好出现在单曲页面URL里面,通过字符串拼接可以得到文件名:"C400" + songmid + ".m4a"

只有文件名和vkey是不够的,还需要知道guid参数值是如何得来的,没有guid参数的话请求音频真实地址会返回响应码403。

r.length > 0 ? MUSIC.jQueryAjax.jsonp({

url: location.protocol + "//c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg",

data: {

cid: 205361747,

format: "json",

callback: a,

uin: g_user.getUin(),

songmid: r.join(","),

filename: n.join(","),

guid: _getGuid()

},

...

}) : t && t()

这段js代码正好写明了请求参数有哪些,guid是通过调用 _getGuid 得到的。_getGuid 方法的代码如下:

function _getGuid() {

if (_guid.length > 0)

return _guid;

var e = MUSIC.cookie.get("pgv_pvid");

if (e && e.length > 0)

return _guid = e;

var t = (new Date).getUTCMilliseconds();

return _guid = Math.round(2147483647 * Math.random()) * t % 1e10,

document.cookie = "pgv_pvid=" + _guid + "; Expires=Sun, 18 Jan 2038 00:00:00 GMT; PATH=/; DOMAIN=qq.com;",

_guid

}

由此可见,guid的核心构造代码是如下两行:

var t = (new Date).getUTCMilliseconds()

_guid = Math.round(2147483647 * Math.random()) * t % 1e10

Python代码示例

import re

import json

import time

import random

import requests

def resolve(url):

"""

resolve audio url

:param url: like 'https://y.qq.com/n/yqq/song/000YU69H3N55rZ.html'

:return:

"""

songmid = re.search('/(\w+).html$', url).groups()[0]

filename = 'C400' + songmid + '.m4a'

guid = int(random.random() * 2147483647) * int(time.time() * 1000) % 10000000000

d = {

'format': 'json',

'cid': 205361747,

'uin': 0,

'songmid': songmid,

'filename': filename,

'guid': guid,

}

r = requests.get('https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg', params=d, verify=False)

vkey = json.loads(r.content)['data']['items'][0]['vkey']

audio_url = 'http://dl.stream.qqmusic.qq.com/%s?vkey=%s&guid=%s&uin=0&fromtag=66' % (filename, vkey, guid)

return audio_url

qq音乐服务器的位置,QQ音乐的歌曲真实地址解析相关推荐

  1. qq邮箱服务器连接错误代码,qq邮箱错误代码103打不开是怎么回事

    有些人因为为qq邮箱打不开是怎么回事显示错误代码103而苦恼,那么qq邮箱打不开是怎么回事呢?显示错误代码103.下面是学习小编给大家整理的有关介绍qq邮箱错误代码103打不开的处理方法,希望对大家有 ...

  2. QQ显示服务器繁忙2103,qq一直出现错误报告.doc

    qq一直出现错误报告 qq一直出现错误报告 QQ错误报告的解决 QQ登录出现错误报告的解决方法 现象:运行QQ时,同时弹出下面的"错误报告"窗口,关闭后QQ密码输入框没法输入密码, ...

  3. Python连接qq邮箱服务器,调用qq邮箱发送邮件实战演示,qq邮箱授权码开通方法

    直接用 python 自带的 smtplib 库和 email 库就能实现邮件的发送. qq 邮箱发送的话,直接用密码是登陆不了的,需要用授权码. import smtplib from email. ...

  4. java qq邮箱服务器端口_java qq 邮箱发送错误以及端口号

    6:sina没错误,但qq有错误?求解答案:将smtp.qq.com个人邮箱爱 改为smtp.exmail.qq.com企业邮箱,建议用企业邮相的主机名 javax.mail.Authenticati ...

  5. 微软关闭音乐服务器,微软关闭Zune音乐服务 Zune播放器变为MP3

    腾讯科技讯 11月16日消息,据外电报道,下载音乐或者串流播放网络歌曲,但Zune播放器仍可作为音乐继续播放器使用. 微软推出首款Zune音乐播放器和相应的Zune数字音乐服务还要追溯到2006年,但 ...

  6. qq飞车服务器修改器,qq飞车ve修改器

    qq飞车ve修改器是一款通过ve修改器查找和修改游戏内存,从而达到刷取s车的目的. 使用方法 1.关闭所有杀毒软件.(VE有时会被误报病毒) 2.启动游戏(窗口化) 3.启动游戏后换上板车 4.最小化 ...

  7. qq聊天信息服务器,golang实现qq聊天之客户端与服务器

    一.用到的net方法 1 .客户端: var buf [512]byte tcpAddr, _ := net.ResolveTCPAddr("tcp", "127.0.0 ...

  8. 电脑登qq显示服务器返回超时,qq登陆 网络服务器超时

    开始第一次号码注册登录.接登录服务器 ]...... 尝试连接UDP登录服务器超时,转尝试连接下一组服务器 UDP登录服务器全部尝试连接失败,尝试下一种登录方式 尝试TCP方式登录,准备连接TCP服务 ...

  9. qq录制视频保存到哪了?如何更改qq录屏存储位置

    一.查看qq录制视频保存位置 如果有录制视频的需求,相信大部分人都是使用qq自带的录屏功能来录制视频.那qq录屏后的视频在哪里去找?今天就给大家分享如何查看qq录制完的视频保存位置操作方法: 第一步: ...

  10. 击溃音乐服务器第一人!周杰伦新歌首发,QQ音乐服务器一度崩溃

    一直以来,在大家眼里,只有微博服务器是"不堪一击"的,明星结个婚,宣布个恋情,微博都会崩.但昨天晚上,击溃音乐平台服务器的男人出现了. 预热多天后,周杰伦的新歌<说好不哭&g ...

最新文章

  1. select 和 order by
  2. 不忘初心,努力做最好的自己
  3. 模拟电路技术之基础知识(六)
  4. Quartz2D简单图形
  5. [云炬创业管理笔记]第四章把握创业机会测试2
  6. 10个让人很舒服的沟通技巧
  7. php网站的编辑器,5款适合PHP使用的HTML编辑器推荐
  8. ubuntu14+vmwear联网
  9. BZOJ1301 字符加密Cipher (后缀数组)
  10. Fragment 源码解析add()和replace()方法
  11. vb6源码 ymodem_VB6 实时曲线显示源码全套资料
  12. 水星usb无线网卡linux驱动下载,水星USB无线网卡mw150us苹果macOS系统驱动成功
  13. composition API
  14. 几近完美的手机电脑无缝共享剪贴板神器,终于被我找到了!
  15. 四叉树——图片应用实例
  16. 【信号与系统】指数信号与正弦信号
  17. Redisson延迟队列
  18. 安装算量软件哪个速度快效率高?
  19. 34岁的困境!测试工程师如何突破职业瓶颈?
  20. 简单计算机英语口语对话视频,优秀简短的英语口语对话

热门文章

  1. Counterfit 部署教程
  2. Win7下如何让Numlock保持打开状态
  3. 基于R语言进行K折交叉验证
  4. 库存管理系统的设计与实现(代码)
  5. 注册表编辑器(regedit)
  6. Windows10无法修改图标字体和菜单栏字体问题 —— regedit注册表修改
  7. 4.0版本的wed.xml。 中间的部分是配置springMVC的。
  8. 参与LABSUniswap IDO送普吉岛酒店公寓
  9. 《逆龄大脑:保持大脑年轻敏锐的新科学》读书笔记
  10. 手机4g网速测试用什么软件,测手机4g网速(4g手机上网速度测试)