I’m currently working on a app that needs for me to be able to download osu beatmap files using there id, I tried just copying the link to the download aka for me it would be
https://osu.ppy.sh/beatmapsets/1012634/download and then just sending a web request to it and download the response but it didn’t quite work it made a 200kb file that’s not the beatmap
also I found this GitHub osu! API issues https://github.com/ppy/osu-api/issues/288 saying to add the cookies but I am not sure how to get that to work in c#.
the code i tried:
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
string downloadUrl = "https://osu.ppy.sh/beatmapsets/1012634/download";
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(downloadUrl);
if (response.IsSuccessStatusCode)
{
// Read the response content as a byte array
byte[] fileBytes = await response.Content.ReadAsByteArrayAsync();
// Save the downloaded file
string filePath = @"C:UserscheadDownloadsmap.osz";
File.WriteAllBytes(filePath, fileBytes);
Console.WriteLine($"File downloaded successfully to: {filePath}");
}
else
{
Console.WriteLine($"Failed to download file. Status code: {response.StatusCode}");
}
}
Console.WriteLine("That's it!");
Console.ReadKey();
}
}
i tried using the osu! API but it doesn’t seem like there is any endpoint for downloading a beatmap
i also tried what Download file using webclient
said to do but it didn’t work
here is the code i tried:
using System;
using System.IO;
using System.Net;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
WebClient wc = new WebClient();
string strFile = Path.Combine(Directory.GetCurrentDirectory(), "downloaded_file.osz");
wc.Credentials = new System.Net.NetworkCredential("me", "pw");
wc.Headers.Add("User-Agent", "my user agent");
wc.DownloadFile("https://osu.ppy.sh/beatmapsets/1012634/download", strFile);
Console.WriteLine("That's it!");
Console.ReadKey();
}
}
i also tried this (it didn’t work):
using System.Net;
class Program
{
static void Main(string[] args)
{
using (var client = new HttpClient())
{
using (var stream = client.GetStreamAsync("https://osu.ppy.sh/beatmapsets/1012634/download"))
{
using (var FileStream = new FileStream("map.osz", FileMode.OpenOrCreate))
{
stream.Result.CopyTo(FileStream);
Console.WriteLine($"Code Returned 0, saved to map.osz in the dir");
}
}
}
Console.ReadKey();
}
}
any help would be greatly appreciated.
user25973874 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.