Skip to content

Commit

Permalink
feat: set request host header
Browse files Browse the repository at this point in the history
  • Loading branch information
Misaka-L committed Jul 27, 2024
1 parent a43bfc1 commit 2cf26e0
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 8 deletions.
43 changes: 35 additions & 8 deletions MisakaBiliApi/Program.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
using System.Net;
using System.Reflection;
using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Models;
using MisakaBiliCore;
using MisakaBiliCore.Options;
using MisakaBiliCore.Services;
using MisakaBiliCore.Services.BiliApi;
using Refit;
Expand Down Expand Up @@ -71,6 +73,15 @@
options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename));
});

#region Options

builder.Services.AddOptions<ApiBaseUrlOptions>()
.Bind(builder.Configuration.GetSection("ApiBaseUrl"))
.ValidateDataAnnotations()
.ValidateOnStart();

#endregion

builder.Services.AddSingleton<BiliApiSecretStorageService>();
builder.Services.AddSingleton<BiliPassportService>();

Expand All @@ -82,28 +93,36 @@

#region HttpClient

builder.Services.AddHttpClient("biliapi", client =>
builder.Services.AddHttpClient("biliapi", (services, client) =>
{
var options = services.GetRequiredService<IOptions<ApiBaseUrlOptions>>().Value;

foreach (var (headerName, value) in defaultRequestHeader)
{
client.DefaultRequestHeaders.Add(headerName, value);
}

client.BaseAddress = new Uri("https://api.bilibili.com");
client.DefaultRequestHeaders.Host = options.BiliApiHost;

client.BaseAddress = new Uri(options.BiliApiBaseUrl);
}).ConfigurePrimaryHttpMessageHandler(services => new SocketsHttpHandler
{
AutomaticDecompression = DecompressionMethods.All,
CookieContainer = services.GetRequiredService<BiliApiSecretStorageService>().CookieContainer
});

builder.Services.AddHttpClient("biliMainWeb", client =>
builder.Services.AddHttpClient("biliMainWeb", (services, client) =>
{
var options = services.GetRequiredService<IOptions<ApiBaseUrlOptions>>().Value;

foreach (var (headerName, value) in defaultRequestHeader)
{
client.DefaultRequestHeaders.Add(headerName, value);
}

client.BaseAddress = new Uri("https://www.bilibili.com");
client.DefaultRequestHeaders.Host = options.BiliWebHost;

client.BaseAddress = new Uri(options.BiliWebBaseUrl);
}).ConfigurePrimaryHttpMessageHandler(services => new SocketsHttpHandler
{
AutomaticDecompression = DecompressionMethods.All,
Expand All @@ -116,29 +135,37 @@
.AddHttpMessageHandler<WbiRequestHandler>();

builder.Services.AddRefitClient<IBiliLiveApiService>()
.ConfigureHttpClient(client =>
.ConfigureHttpClient((services, client) =>
{
var options = services.GetRequiredService<IOptions<ApiBaseUrlOptions>>().Value;

foreach (var (headerName, value) in defaultRequestHeader)
{
client.DefaultRequestHeaders.Add(headerName, value);
}

client.BaseAddress = new Uri("https://api.live.bilibili.com");
client.DefaultRequestHeaders.Host = options.BiliLiveApiHost;

client.BaseAddress = new Uri(options.BiliLiveApiBaseUrl);
}).ConfigurePrimaryHttpMessageHandler(services => new SocketsHttpHandler
{
AutomaticDecompression = DecompressionMethods.All,
CookieContainer = services.GetRequiredService<BiliApiSecretStorageService>().CookieContainer
});

builder.Services.AddRefitClient<IBiliPassportApiService>()
.ConfigureHttpClient(client =>
.ConfigureHttpClient((services, client) =>
{
var options = services.GetRequiredService<IOptions<ApiBaseUrlOptions>>().Value;

foreach (var (headerName, value) in defaultRequestHeader)
{
client.DefaultRequestHeaders.Add(headerName, value);
}

client.BaseAddress = new Uri("https://passport.bilibili.com");
client.DefaultRequestHeaders.Host = options.BiliPassportHost;

client.BaseAddress = new Uri(options.BiliPassportBaseUrl);
}).ConfigurePrimaryHttpMessageHandler(services => new SocketsHttpHandler
{
AutomaticDecompression = DecompressionMethods.All,
Expand Down
14 changes: 14 additions & 0 deletions MisakaBiliCore/Options/ApiBaseUrlOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace MisakaBiliCore.Options;

public class ApiBaseUrlOptions
{
public string BiliApiBaseUrl { get; set; } = "https://api.bilibili.com";
public string BiliPassportBaseUrl { get; set; } = "https://passport.bilibili.com";
public string BiliWebBaseUrl { get; set; } = "https://www.bilibili.com";
public string BiliLiveApiBaseUrl { get; set; } = "https://api.live.bilibili.com";

public string BiliApiHost { get; set; } = "api.bilibili.com";
public string BiliPassportHost { get; set; } = "passport.bilibili.com";
public string BiliWebHost { get; set; } = "www.bilibili.com";
public string BiliLiveApiHost { get; set; } = "api.live.bilibili.com";
}

0 comments on commit 2cf26e0

Please sign in to comment.