Skip to content

Unable to download a private video with cookies (401 Unauthorized) #781

@codewithmecoder

Description

@codewithmecoder

Version

6.3.13

Platform

.NET 8.0 / Window 11

Steps to reproduce

Step 1

  • Get all the cookie from web browser using WebView2
 List<CoreWebView2Cookie> wv2Cookies = [];
if (webView.CoreWebView2 != null)
    wv2Cookies = await webView.CoreWebView2.CookieManager.GetCookiesAsync("https://youtube.com");
CookieCollection sysNetCookieCollection = [];
wv2Cookies.ForEach(c => sysNetCookieCollection.Add(c.ToSystemNetCookie()));

var postData = new DownloadMultiPlaylistsRq
{
    Cookies = sysNetCookieCollection.ToImmutableList(),
    PlaylistUrls = [
        "https://www.youtube.com/playlist?list=PLgomaFin7XDmN6yMSDH6vQ5vWBWsbFB0K"
        //"https://www.youtube.com/playlist?list=PLgomaFin7XDmVk3B20G9WtCxervsc1tt0"
    ]
};

string json = Newtonsoft.Json.JsonConvert.SerializeObject(postData);

// Prepare the content
var content = new StringContent(json, Encoding.UTF8, "application/json");

// Send POST request
HttpResponseMessage response = await httpClient.PostAsync("https://localhost:7151/api/v1/VideoDownload/playlists", content);

I use WPF for get all the cookie then pass it to my dotnet 8.0 API.

Step 2

  • Init var youtubeClient2 = new YoutubeClient(cookies);

Step 2

  • Getting all videos from a playlist that contain private videos that I can access with my youtube account. All the videos are returned.
  • Get each private video info is okay but when download I got 401.

An unhandled exception has occurred while executing the request. System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized).

public async Task<BaseRpModel> DownloadMultiPlaylistsAsync(IReadOnlyList<Cookie> cookies, List<string> playlistUrls, CancellationToken cancellationToken = default)
{
    if (!Directory.Exists(setting.VideoPath)) Directory.CreateDirectory(setting.VideoPath);

    foreach (var playlistUrl in playlistUrls)
    {
        await DownloadPlaylistAsync(cookies, playlistUrl, cancellationToken);
    }
    return new BaseRpModel
    {
        Code = "OK",
        Message = "Done downloading ... ",
    };
}

public async Task<BaseRpModel> DownloadPlaylistAsync(IReadOnlyList<Cookie> cookies, string playlistUrl, CancellationToken cancellationToken = default)
{
    if (!Directory.Exists(setting.VideoPath)) Directory.CreateDirectory(setting.VideoPath);

    var youtubeClient2 = new YoutubeClient(cookies);

    var playlist = await youtubeClient2.Playlists.GetAsync(playlistUrl, cancellationToken);
    var playlistPath = Path.Combine(setting.VideoPath, playlist.Title);
    Directory.CreateDirectory(playlistPath);

    var videos = await youtubeClient2.Playlists.GetVideosAsync(playlist.Id, cancellationToken);

    logger.LogDebug("Total videos: {@total}", videos.Count);

    //var tasks = videos.Select(i => RunAsync(i, youtubeClient2, playlistPath, cancellationToken));

    //await Task.WhenAll(tasks);

    foreach (var i in videos)
    {
        await RunAsync(i, youtubeClient2, playlistPath, cancellationToken);
    }

    return new BaseRpModel
    {
        Code = "OK",
        Message = "Done downloading ... ",
    };
}

Details

  • Expectation: I think it should not have any from problem with download private video coz I have all the cookies
  • Actual Result:
    An unhandled exception has occurred while executing the request. System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized). .

Thank you so much for check and help this out.🙏🙏

Checklist

  • I have looked through existing issues to make sure that this bug has not been reported before
  • I have provided a descriptive title for this issue
  • I have made sure that this bug is reproducible on the latest version of the package
  • I have provided all the information needed to reproduce this bug as efficiently as possible
  • I have sponsored this project

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions