Google Play音乐播放未经授权的响应

时间:2016-02-04 05:54:10

标签: c# google-play google-play-services

首先我知道api不受支持。 https://stackoverflow.com/questions/16707164/is-there-a-google-play-music-api

我一直试图在上面的帖子中对一些api进行逆向工程。这些是唯一真正的信息来源,因为没有其他文件记录它。

我已成功实现了oauth令牌检索系统。

然而,当我将令牌传递给下面的时候,我得到了Forbidden Error 403

Url =

https://play.google.com/music/services/streamingloadalltracks?format=jsarray

标题=

client.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse(String.Format("GoogleLogin auth={0}", _token));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("OAuth", _token);

代码

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri(paramObj.Base);
    client.Timeout = TimeSpan.FromSeconds(5);
    if (!paramObj.skipAuth)
    {
        client.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse(String.Format("GoogleLogin auth={0}", _token));
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("OAuth", _token);
    }
    //client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
    //client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
    //client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("sdch"));

    try
    {
        if (paramObj.post)
        {
            return client
                .PostAsync(paramObj.method + paramObj.queryString, paramObj.content)
                .Result
                .Content
                .ReadAsStringAsync()
                //.ReadAsByteArrayAsync()
                .Result;
        }
        else
        {
            return client
                .GetAsync(paramObj.method + paramObj.queryString)
                .Result
                .Content
                .ReadAsStringAsync()
                //.ReadAsByteArrayAsync()
                .Result;
        }
    }
    catch (Exception exception)
    {
        return null;
    }
}

问题是为什么这不起作用。我一直在调查其他api,他们实现相同的调用(我认为我的python非常生疏)

令牌生成器。

public string Oauth2AuthorizeUrl =>
    string.Format(
        "{0}?response_type=code&client_id={1}&redirect_uri={2}&scope={3}&access_type=offline",
        GooglePlayAuthorizeMethod,
        ClientId,
        HttpUtility.UrlEncode(GooglePlayAuthorizeRedirectURL),
        GooglePlayAuthorizeScope
    );

public void Oauth2RetrieveToken(string code)
{
    var querystring = string.Format(
        "?response_type=code&code={0}client_id={1}&client_secret={3}&redirect_uri={2}&grant_type=authorization_code",
        code,
        ClientId,
        HttpUtility.UrlEncode(GooglePlayAuthorizeRedirectURL),
        ClientSecret
    );

    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("https://accounts.google.com");
        client.Timeout = TimeSpan.FromSeconds(5);

        var content = new FormUrlEncodedContent(new[]
        {
            new KeyValuePair<string, string>("code", code),
            new KeyValuePair<string, string>("client_id", ClientId),
            new KeyValuePair<string, string>("client_secret", ClientSecret),
            new KeyValuePair<string, string>("redirect_uri", GooglePlayAuthorizeRedirectURL),
            new KeyValuePair<string, string>("grant_type", "authorization_code")
        });

        var result = client
            .PostAsync(GooglePlayRequestToken , content)
            .Result
            .Content
            .ReadAsStringAsync()
            .Result;

        var value = JObject.Parse(result);

        var libs = User.Libs;
        libs.GooglePlayPassword = value["access_token"].ToString();
        User.UpdateSettings(libs);
    }
}

1 个答案:

答案 0 :(得分:1)

查看我尝试使用Google Play音乐API here (https://github.com/coman3/Google.Music))。

在身份验证和呼叫方面,它完美运行(尽管不支持2因子身份验证)。