关于某Q音乐提示referer不合法解决方法

首先:

你需要使用后台代理的方式,越过跨域请求问题

然后:

后端在请求数据时,返回数据如下:(提示 referer不合法)


此时的 referer为   "referer": "https://c.y.qq.com"

无意中把 referer改为 "referer": "https://c.y.qq.com/",发现能正常请求并返回数据

后端代码如下: (出问题的是最后一个getDisc函数,下面为正常能请求的音乐api),后面会整理一篇音乐api的文章。

import base64
import json

import requests
from django.http import JsonResponse,HttpResponse

# 定义一个请求头
headers = {
    "user-agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
    "referer": "https://c.y.qq.com/",
    "host": "c.y.qq.com",
}
headers2 = {
    "user-agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
    "referer": "http://dl.stream.qqmusic.qq.com/",
    "host": "dl.stream.qqmusic.qq.com"
}


# Create your views here.
def getSliderImg(request):
    url = "https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg?g_tk=976692372&inCharset=utf-8&outCharset=utf-8&notice=0&format=json&plarform=h5&uin=0&needNewCode=1"
    res = requests.get(url, params=None, headers=headers)
    return JsonResponse(json.loads(res.text), safe=False,json_dumps_params={'ensure_ascii':False})

# 获得歌手列表
def getSingerList(request):
    url = "https://c.y.qq.com/v8/fcg-bin/v8.fcg?g_tk=976692372&inCharset=utf-8&outCharset=utf-8&notice=0&format=json&channel=singer&page=list&key=all_all_all&pagesize=100&pagenum=1&hostUin=0&needNewCode=0&platform=yqq"
    res = requests.get(url, params=None, headers=headers)
    print('12313123123')

    return JsonResponse(json.loads(res.text), safe=False,json_dumps_params={'ensure_ascii':False})

# 获得歌手所有歌曲列表
def getSingerDetail(request):
    singerId = request.GET.get('singerId')
    url = "https://c.y.qq.com/v8/fcg-bin/fcg_v8_singer_track_cp.fcg?g_tk=5381&inCharset=utf-8&outCharset=utf-8&notice=0&format=json&hostUin=0&needNewCode=0&platform=yqq&order=listen&begin=0&num=100&songstatus=1&singermid=" + singerId
    res = requests.get(url, params=None, headers=headers)
    return JsonResponse(json.loads(res.text), safe=False,json_dumps_params={'ensure_ascii':False})

# 获得歌曲的音频文件,放在audio标签中可以直接播放
def getSong(request):
    url = "http://dl.stream.qqmusic.qq.com/C400001Qu4I30eVFYb.m4a?vkey=9CE5CEEC332B5ABFCBB1CA09E971B9FE373307709CD462AC1CD78953D28F5E4B73778BD553D6444B173CC4464A6529D412FCB1F15982A631&guid=7175649092&uin=0&fromtag=66"
    res = requests.get(url, params=None, headers=headers2)
    return HttpResponse(res.content)

# 获取对应歌曲的歌词
def getLyric(request):
    songId = request.GET.get('songId')
    url = "https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric.fcg?g_tk=5381&uin=0&format=json&inCharset=utf-8&outCharset=utf-8&notice=0&platform=h5&needNewCode=1&nobase64=1&musicid={}&songtype=0&_=1577718325581".format(songId)
    res = requests.get(url, params=None, headers=headers2)
    return JsonResponse(json.loads(res.text[18:-1]), safe=False,json_dumps_params={'ensure_ascii':True})

# 根据给定的歌单 disstid 获取某个推荐歌单的歌曲列表,这里给了一个固定值,下面的url是获取多个歌单的,里面有content_id的键,这个也就是disstid
# https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&data=%7B%22recomPlaylist%22%3A%7B%22method%22%3A%22get_hot_recommend%22%2C%22param%22%3A%7B%22async%22%3A1%2C%22cmd%22%3A2%7D%2C%22module%22%3A%22playlist.HotRecommendServer%22%7D%7D&&callback=__jp0
def getDisc(request):
    # disstid = request.GET.get('disstid')
    url = "https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&new_format=1&disstid=7372500022&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0"
    res = requests.get(url, params=None, headers=headers)
    print(res.text)
    return JsonResponse(json.loads(res.text), safe=False, json_dumps_params={'ensure_ascii': False})

猜你喜欢

转载自blog.csdn.net/qq_16687863/article/details/103901334