Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

38 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

LuYao.TlsClient

ไธ€ไธชๅŸบไบŽ bogdanfinn/tls-client ็š„ .NET TLS ๅฎขๆˆท็ซฏๅบ“๏ผŒ้€š่ฟ‡ๅŽŸ็”Ÿไบ’ๆ“ไฝœ (P/Invoke) ่ฐƒ็”จ Go ็ผ–่ฏ‘็š„ๅŠจๆ€้“พๆŽฅๅบ“๏ผŒๆไพ›้ซ˜็บง TLS ๆŒ‡็บนๆจกๆ‹ŸๅŠŸ่ƒฝใ€‚

้กน็›ฎ็ฎ€ไป‹

LuYao.TlsClient ๆ˜ฏไธ€ไธช่ทจๅนณๅฐ็š„ .NET ๅบ“๏ผŒๅ…่ฎธๅผ€ๅ‘่€…ๅœจ .NET ๅบ”็”จ็จ‹ๅบไธญไฝฟ็”จ้ซ˜็บง TLS ๅฎขๆˆท็ซฏๅŠŸ่ƒฝใ€‚่ฏฅๅบ“ๅฐ่ฃ…ไบ† tls-client Go ๅบ“็š„ๅŠŸ่ƒฝ๏ผŒๅฏไปฅๆจกๆ‹Ÿๅ„็งๆต่งˆๅ™จๅ’Œๅฎขๆˆท็ซฏ็š„ TLS ๆŒ‡็บน๏ผŒ็ป•่ฟ‡ๆŸไบ›ๅŸบไบŽ TLS ๆŒ‡็บน็š„ๅ็ˆฌ่™ซๆœบๅˆถใ€‚

ไธป่ฆ็‰นๆ€ง

  • ๅคšๆต่งˆๅ™จ TLS ๆŒ‡็บนๆจกๆ‹Ÿ๏ผšๆ”ฏๆŒๆจกๆ‹Ÿ Chromeใ€Firefoxใ€Safariใ€Opera ็ญ‰ๅคš็งๆต่งˆๅ™จ็š„ไธๅŒ็‰ˆๆœฌ
  • ่ทจๅนณๅฐๆ”ฏๆŒ๏ผšๆ”ฏๆŒ Windows (x86/x64)ใ€Linux (x64/ARM64)ใ€macOS (x64/ARM64)ใ€Alpine Linux
  • ๅคš .NET ็‰ˆๆœฌๅ…ผๅฎน๏ผšๆ”ฏๆŒ .NET Framework 4.5/4.6.1ใ€.NET Standard 2.0/2.1ใ€.NET 6/7/8
  • Native AOT ๆ”ฏๆŒ๏ผš.NET 8+ ๅบ”็”จๅฏไฝฟ็”จ Native AOT ็ผ–่ฏ‘๏ผŒ่Žทๅพ—ๆ›ดๅฟซ็š„ๅฏๅŠจ้€Ÿๅบฆๅ’Œๆ›ดๅฐ็š„ๅ†…ๅญ˜ๅ ็”จ ๐Ÿš€
  • HttpClient ้›†ๆˆ๏ผšๆไพ› TlsClientHttpMessageHandler๏ผŒๅฏๆ— ็ผ้›†ๆˆๅˆฐๆ ‡ๅ‡† .NET HttpClient ๅทฅไฝœๆต
  • ไผš่ฏ็ฎก็†๏ผšๆ”ฏๆŒ Cookie ไผš่ฏ็ฎก็†ใ€่‡ชๅฎšไน‰ไปฃ็†ใ€้‡ๅฎšๅ‘ๆŽงๅˆถ็ญ‰
  • ็ตๆดป้…็ฝฎ๏ผšๆ”ฏๆŒ่‡ชๅฎšไน‰ TLS ้…็ฝฎใ€HTTP ๅคด้กบๅบใ€่ถ…ๆ—ถ่ฎพ็ฝฎ็ญ‰

ไฝฟ็”จๆ–นๅผ

ๅฎ‰่ฃ…

้€š่ฟ‡ NuGet ๅŒ…็ฎก็†ๅ™จๅฎ‰่ฃ…๏ผš

dotnet add package LuYao.TlsClient

ๆˆ–ๅœจ้กน็›ฎๆ–‡ไปถไธญๆทปๅŠ ๏ผš

<PackageReference Include="LuYao.TlsClient" Version="*" />

ๅŸบๆœฌไฝฟ็”จ็คบไพ‹

1. ็›ดๆŽฅไฝฟ็”จ TlsClient

using LuYao.TlsClient;

// ๅˆ›ๅปบ TLS ๅฎขๆˆท็ซฏๅฎžไพ‹
using var client = new TlsClient();

// ้…็ฝฎๅฎขๆˆท็ซฏ
client.TLSClientIdentifier = ClientIdentifiers.Chrome_124;  // ๆจกๆ‹Ÿ Chrome 124
client.Proxy = "http://proxy.example.com:8080";             // ๅฏ้€‰๏ผš่ฎพ็ฝฎไปฃ็†
client.FollowRedirect = true;                               // ่‡ชๅŠจ่ทŸ้š้‡ๅฎšๅ‘
client.Timeout = TimeSpan.FromSeconds(30);                  // ่ฎพ็ฝฎ่ถ…ๆ—ถ

// ๅˆ›ๅปบ่ฏทๆฑ‚
var request = client.CreateRequest();
request.RequestUrl = "https://example.com";
request.RequestMethod = "GET";
request.Headers["User-Agent"] = "Mozilla/5.0...";

// ๅ‘้€่ฏทๆฑ‚
var response = client.Request(request);

// ๅค„็†ๅ“ๅบ”
Console.WriteLine($"็Šถๆ€็ : {response.Status}");
Console.WriteLine($"ๅ“ๅบ”ไฝ“: {response.Body}");

2. ไธŽ HttpClient ้›†ๆˆไฝฟ็”จ

using System.Net.Http;
using LuYao.TlsClient;

// ๅˆ›ๅปบ TLS ๅฎขๆˆท็ซฏ
var tlsClient = new TlsClient
{
    TLSClientIdentifier = ClientIdentifiers.Chrome_124,
    FollowRedirect = true,
    Timeout = TimeSpan.FromSeconds(30)
};

// ไฝฟ็”จ TlsClientHttpMessageHandler ๅˆ›ๅปบ HttpClient
using var httpClient = new HttpClient(new TlsClientHttpMessageHandler(tlsClient));

// ๅƒไฝฟ็”จๆ™ฎ้€š HttpClient ไธ€ๆ ทไฝฟ็”จ
var response = await httpClient.GetAsync("https://example.com");
var content = await response.Content.ReadAsStringAsync();

Console.WriteLine(content);

3. Cookie ไผš่ฏ็ฎก็†

using var client = new TlsClient();

// ๆทปๅŠ  Cookies
var addCookiesInput = new AddCookiesToSessionInput
{
    SessionId = client.SessionId,
    Url = "https://example.com",
    Cookies = new List<Cookie>
    {
        new Cookie 
        { 
            Name = "session_id", 
            Value = "abc123",
            Domain = "example.com",
            Path = "/"
        }
    }
};
client.AddCookiesToSession(addCookiesInput);

// ่Žทๅ– Cookies
var getCookiesInput = new GetCookiesFromSessionInput
{
    SessionId = client.SessionId,
    Url = "https://example.com"
};
var cookies = client.GetCookiesFromSession(getCookiesInput);

foreach (var cookie in cookies.Cookies)
{
    Console.WriteLine($"{cookie.Name}: {cookie.Value}");
}

ๆ”ฏๆŒ็š„ๆต่งˆๅ™จๆ ‡่ฏ†

ๅบ“ๆไพ›ไบ†ๅคš็ง้ข„ๅฎšไน‰็š„ๆต่งˆๅ™จ TLS ๆŒ‡็บนๆ ‡่ฏ†๏ผˆ้€š่ฟ‡ ClientIdentifiers ็ฑป๏ผ‰๏ผš

  • Chrome: Chrome_103 ่‡ณ Chrome_124
  • Firefox: Firefox_102 ่‡ณ Firefox_110
  • Safari: Safari_15_6_1, Safari_16_0, Safari_IOS_15_5/15_6/16_0 ็ญ‰
  • Opera: Opera_89 ่‡ณ Opera_91
  • ็งปๅŠจๅบ”็”จ: Nikeใ€Zalandoใ€Meshใ€Confirmed ็ญ‰็‰นๅฎšๅบ”็”จ็š„ๆŒ‡็บน
  • Android OkHttp: Okhttp4_Android_7 ่‡ณ Okhttp4_Android_13

่ฝฏไปถๆžถๆž„

ๆžถๆž„ๆฆ‚่ฟฐ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚    .NET ๅบ”็”จ็จ‹ๅบ                     โ”‚
โ”‚                                     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚   HttpClient (ๅฏ้€‰)           โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚             โ”‚                       โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚ TlsClientHttpMessageHandler  โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚             โ”‚                       โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚      TlsClient               โ”‚  โ”‚
โ”‚  โ”‚  - ไผš่ฏ็ฎก็†                   โ”‚  โ”‚
โ”‚  โ”‚  - ้…็ฝฎ้€‰้กน                   โ”‚  โ”‚
โ”‚  โ”‚  - JSON ๅบๅˆ—ๅŒ–               โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚             โ”‚                       โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚    NativeMethods             โ”‚  โ”‚
โ”‚  โ”‚  - P/Invoke ่ฐƒ็”จ             โ”‚  โ”‚
โ”‚  โ”‚  - ๅ†…ๅญ˜ๅฐ้€ๅค„็†               โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ”‚ P/Invoke / FFI
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   ๅŽŸ็”ŸๅŠจๆ€้“พๆŽฅๅบ“ (Go ็ผ–่ฏ‘)           โ”‚
โ”‚   tls-client.dll / libtls-client.so โ”‚
โ”‚                                     โ”‚
โ”‚  - TLS ๆกๆ‰‹ๅค„็†                     โ”‚
โ”‚  - ๆต่งˆๅ™จๆŒ‡็บนๆจกๆ‹Ÿ                    โ”‚
โ”‚  - HTTP/HTTPS ่ฏทๆฑ‚ๅค„็†              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆ ธๅฟƒ็ป„ไปถ่ฏดๆ˜Ž

1. TlsClient ็ฑป

  • ่Œ่ดฃ: ไธป่ฆๅฎขๆˆท็ซฏ็ฑป๏ผŒ็ฎก็† TLS ไผš่ฏๅ’Œ่ฏทๆฑ‚
  • ๅŠŸ่ƒฝ:
    • ไผš่ฏ็”Ÿๅ‘ฝๅ‘จๆœŸ็ฎก็†
    • ่ฏทๆฑ‚้…็ฝฎๅ’Œๆ‰ง่กŒ
    • Cookie ็ฎก็†
    • JSON ๅบๅˆ—ๅŒ–/ๅๅบๅˆ—ๅŒ–

2. TlsClientHttpMessageHandler ็ฑป

  • ่Œ่ดฃ: HttpMessageHandler ๅฎž็Žฐ๏ผŒ็”จไบŽไธŽๆ ‡ๅ‡† HttpClient ้›†ๆˆ
  • ๅŠŸ่ƒฝ:
    • ๅฐ† HttpRequestMessage ่ฝฌๆขไธบ RequestInput
    • ๅฐ† Response ่ฝฌๆขไธบ HttpResponseMessage
    • ๆ”ฏๆŒๆตๅผ่พ“ๅ‡บๅ’Œไธดๆ—ถๆ–‡ไปถๅค„็†

3. NativeMethods ็ฑป

  • ่Œ่ดฃ: P/Invoke ๅฃฐๆ˜Ž๏ผŒ่ฐƒ็”จๅŽŸ็”Ÿ Go ๅบ“
  • ๆ–นๆณ•:
    • Request: ๅ‘้€ HTTP/HTTPS ่ฏทๆฑ‚
    • DestroySession: ้”€ๆฏๆŒ‡ๅฎšไผš่ฏ
    • DestroyAll: ้”€ๆฏๆ‰€ๆœ‰ไผš่ฏ
    • GetCookiesFromSession: ่Žทๅ–ไผš่ฏ Cookies
    • AddCookiesToSession: ๆทปๅŠ  Cookies ๅˆฐไผš่ฏ
    • FreeMemory: ้‡Šๆ”พๅŽŸ็”Ÿๅ†…ๅญ˜

4. Types ็ฑป

  • ่Œ่ดฃ: ๅฎšไน‰ไธŽ Go ๅบ“ไบคไบ’็š„ๆ•ฐๆฎ็ฑปๅž‹
  • ไธป่ฆ็ฑปๅž‹:
    • RequestInput: ่ฏทๆฑ‚ๅ‚ๆ•ฐ
    • Response: ๅ“ๅบ”ๆ•ฐๆฎ
    • Cookie: Cookie ไฟกๆฏ
    • CustomTlsClient: ่‡ชๅฎšไน‰ TLS ้…็ฝฎ
    • TransportOptions: ไผ ่พ“้€‰้กน

5. ClientIdentifiers ็ฑป

  • ่Œ่ดฃ: ๆไพ›้ข„ๅฎšไน‰็š„ๆต่งˆๅ™จ TLS ๆŒ‡็บนๆ ‡่ฏ†็ฌฆ
  • ๅŒ…ๅซ: 50+ ็งไธๅŒๆต่งˆๅ™จๅ’Œๅบ”็”จ็š„ TLS ๆŒ‡็บน

ๅนณๅฐๆ”ฏๆŒ

่ฏฅๅบ“้€š่ฟ‡่ฟ่กŒๆ—ถๆ ‡่ฏ†็ฌฆ (RID) ๆ”ฏๆŒๅคšๅนณๅฐ๏ผš

ๅนณๅฐ ๆžถๆž„ RID ๅŽŸ็”Ÿๅบ“ๆ ผๅผ
Windows x86 win-x86 tls-client.dll
Windows x64 win-x64 tls-client.dll
Linux x64 linux-x64 libtls-client.so
Linux ARM64 linux-arm64 libtls-client.so
Alpine Linux x64 alpine-x64 libtls-client.so
macOS x64 osx-x64 libtls-client.dylib
macOS ARM64 osx-arm64 libtls-client.dylib

ไพ่ต–็ป„ไปถ

NuGet ๅŒ…ไพ่ต–

่ฟ่กŒๆ—ถไพ่ต–๏ผˆๆŒ‰ๆก†ๆžถๅŒบๅˆ†๏ผ‰

.NET 6.0 / 7.0 / 8.0:

  • System.Text.Json (ๅ†…็ฝฎ)
    • ็”จ้€”: JSON ๅบๅˆ—ๅŒ–ๅ’Œๅๅบๅˆ—ๅŒ–
    • ็‰นๆ€ง: ๆ”ฏๆŒ AOT ็ผ–่ฏ‘๏ผŒ.NET 8 ไฝฟ็”จๆบไปฃ็ ็”Ÿๆˆๅ™จ
    • ่ฎธๅฏ่ฏ: MIT

.NET Framework 4.5/4.6.1 ๅ’Œ .NET Standard 2.0/2.1:

  • Newtonsoft.Json (v13.0.3)
    • ็”จ้€”: JSON ๅบๅˆ—ๅŒ–ๅ’Œๅๅบๅˆ—ๅŒ–
    • ่ฎธๅฏ่ฏ: MIT

.NET Framework ็‰นๅฎšไพ่ต–

  • System.Net.Http (ไป… .NET Framework 4.5 ๅ’Œ 4.6.1)
    • ็”จ้€”: HTTP ๅฎขๆˆท็ซฏๅŠŸ่ƒฝ
    • ๆฅๆบ: .NET Framework ๅ†…็ฝฎ

ๅŽŸ็”Ÿๅบ“ไพ่ต–

  • tls-client (Go ็ผ–่ฏ‘็š„ๅŠจๆ€้“พๆŽฅๅบ“, v1.9.1)
    • ๆฅๆบ: bogdanfinn/tls-client
    • ็”จ้€”: ๆไพ›ๆ ธๅฟƒ TLS ๅฎขๆˆท็ซฏๅŠŸ่ƒฝ
    • ่ฎธๅฏ่ฏ: BSD 3-Clause

็›ฎๆ ‡ๆก†ๆžถ

ๅบ“ๆ”ฏๆŒไปฅไธ‹ .NET ็›ฎๆ ‡ๆก†ๆžถ๏ผš

  • .NET Framework 4.5
  • .NET Framework 4.6.1
  • .NET Standard 2.0
  • .NET Standard 2.1
  • .NET 6.0
  • .NET 7.0
  • .NET 8.0

ๆž„ๅปบๅทฅๅ…ทไพ่ต–

  • Nuke.Common: ๆž„ๅปบ่‡ชๅŠจๅŒ–ๆก†ๆžถ
  • GitVersion: ็‰ˆๆœฌ็ฎก็†
  • .NET SDK: ็”จไบŽ็ผ–่ฏ‘ๅ’Œๆž„ๅปบ

้…็ฝฎ้€‰้กน

TlsClient ไธป่ฆๅฑžๆ€ง

ๅฑžๆ€ง ็ฑปๅž‹ ้ป˜่ฎคๅ€ผ ่ฏดๆ˜Ž
SessionId string GUID ไผš่ฏๅ”ฏไธ€ๆ ‡่ฏ†็ฌฆ
TLSClientIdentifier string Chrome_124 TLS ๆŒ‡็บนๆ ‡่ฏ†็ฌฆ
Proxy string null ไปฃ็†ๆœๅŠกๅ™จๅœฐๅ€
FollowRedirect bool false ๆ˜ฏๅฆ่‡ชๅŠจ่ทŸ้š้‡ๅฎšๅ‘
InsecureSkipVerify bool false ๆ˜ฏๅฆ่ทณ่ฟ‡ SSL ่ฏไนฆ้ชŒ่ฏ
DisableIPV6 bool false ๆ˜ฏๅฆ็ฆ็”จ IPv6
DisableIPV4 bool false ๆ˜ฏๅฆ็ฆ็”จ IPv4
LocalAddress string null ๆœฌๅœฐ็ป‘ๅฎšๅœฐๅ€
StreamOutput bool false ๆ˜ฏๅฆไฝฟ็”จๆตๅผ่พ“ๅ‡บ
Timeout TimeSpan 0 (ๆ— ้™ๅˆถ) ่ฏทๆฑ‚่ถ…ๆ—ถๆ—ถ้—ด
WithDebug bool false ๆ˜ฏๅฆๅฏ็”จ่ฐƒ่ฏ•ๆจกๅผ
ForceHttp1 bool false ๆ˜ฏๅฆๅผบๅˆถไฝฟ็”จ HTTP/1.1

RequestInput ้ซ˜็บง้€‰้กน

  • CertificatePinning: ่ฏไนฆๅ›บๅฎš้…็ฝฎ
  • CustomTlsClient: ่‡ชๅฎšไน‰ TLS ๅฎขๆˆท็ซฏ้…็ฝฎ
  • TransportOptions: ไผ ่พ“ๅฑ‚้€‰้กน๏ผˆๆ‹จๅท่ถ…ๆ—ถใ€็ฉบ้—ฒ่ฟžๆŽฅ่ถ…ๆ—ถ็ญ‰๏ผ‰
  • HeaderOrder: ่‡ชๅฎšไน‰ HTTP ๅคด้กบๅบ
  • ProxyRotation: ไปฃ็†่ฝฎๆข้…็ฝฎ

้กน็›ฎ็ป“ๆž„

luyao-tls-client/
โ”œโ”€โ”€ src/
โ”‚   โ””โ”€โ”€ LuYao.TlsClient/           # ไธป้กน็›ฎๆบไปฃ็ 
โ”‚       โ”œโ”€โ”€ TlsClient.cs           # ๆ ธๅฟƒๅฎขๆˆท็ซฏ็ฑป
โ”‚       โ”œโ”€โ”€ TlsClientHttpMessageHandler.cs  # HttpClient ้›†ๆˆ
โ”‚       โ”œโ”€โ”€ NativeMethods.cs       # P/Invoke ๅฃฐๆ˜Ž
โ”‚       โ”œโ”€โ”€ Types.cs               # ๆ•ฐๆฎ็ฑปๅž‹ๅฎšไน‰
โ”‚       โ”œโ”€โ”€ ClientIdentifiers.cs   # ๆต่งˆๅ™จๆ ‡่ฏ†็ฌฆ
โ”‚       โ”œโ”€โ”€ CStringMarshaler.cs    # C ๅญ—็ฌฆไธฒๅฐ้€ๅ™จ
โ”‚       โ””โ”€โ”€ ...
โ”œโ”€โ”€ build/                         # ๆž„ๅปบ่„šๆœฌๅ’Œ้…็ฝฎ
โ”‚   โ”œโ”€โ”€ Build.cs                   # Nuke ๆž„ๅปบๅฎšไน‰
โ”‚   โ”œโ”€โ”€ Consts.cs                  # ๅธธ้‡ๅฎšไน‰
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ .github/
โ”‚   โ””โ”€โ”€ workflows/                 # GitHub Actions ๅทฅไฝœๆต
โ”‚       โ”œโ”€โ”€ continuous.yml         # ๆŒ็ปญ้›†ๆˆ
โ”‚       โ””โ”€โ”€ Publish_NuGet_Manual.yml  # NuGet ๅ‘ๅธƒ
โ”œโ”€โ”€ LuYao.TlsClient.sln           # Visual Studio ่งฃๅ†ณๆ–นๆกˆ
โ””โ”€โ”€ README.md                      # ๆœฌๆ–‡ๆกฃ

ๆž„ๅปบๅ’Œๅ‘ๅธƒ

ๆœฌๅœฐๆž„ๅปบ

# Windows
.\build.cmd Compile

# Linux/macOS
./build.sh Compile

ๆ‰“ๅŒ… NuGet

# Windows
.\build.cmd Pack

# Linux/macOS
./build.sh Pack

ๅ‘ๅธƒๅˆฐ NuGet

้กน็›ฎไฝฟ็”จ GitHub Actions ่‡ชๅŠจๅŒ–ๅ‘ๅธƒๆต็จ‹๏ผŒ้€š่ฟ‡ Publish_NuGet_Manual ๅทฅไฝœๆตๆ‰‹ๅŠจ่งฆๅ‘ใ€‚

Native AOT ๆ”ฏๆŒ

ไปŽ .NET 8 ๅผ€ๅง‹๏ผŒๆœฌๅบ“ๅฎŒๅ…จๆ”ฏๆŒ Native AOT ็ผ–่ฏ‘๏ผ่ฟ™ๆ„ๅ‘ณ็€ๆ‚จๅฏไปฅ๏ผš

  • ๐Ÿš€ ๆ›ดๅฟซ็š„ๅฏๅŠจ้€Ÿๅบฆ๏ผšๆ— ้œ€ JIT ็ผ–่ฏ‘๏ผŒๅฏๅŠจ้€Ÿๅบฆๆๅ‡ 50-80%
  • ๐Ÿ’พ ๆ›ดๅฐ็š„ๅ†…ๅญ˜ๅ ็”จ๏ผšๅ†…ๅญ˜ไฝฟ็”จ้™ไฝŽ 20-40%
  • ๐Ÿ“ฆ ่‡ชๅŒ…ๅซ้ƒจ็ฝฒ๏ผšๆ— ้œ€ๅฎ‰่ฃ… .NET ่ฟ่กŒๆ—ถ
  • โšก ๅŽŸ็”Ÿๆ€ง่ƒฝ๏ผš็ผ–่ฏ‘ไธบๅนณๅฐๅŽŸ็”Ÿไปฃ็ 

ๅฟซ้€Ÿๅผ€ๅง‹ AOT

ๅœจๆ‚จ็š„ .NET 8 ้กน็›ฎไธญๅฏ็”จ AOT๏ผš

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <PublishAot>true</PublishAot>
  </PropertyGroup>
  
  <ItemGroup>
    <PackageReference Include="LuYao.TlsClient" Version="*" />
  </ItemGroup>
</Project>

็„ถๅŽๅ‘ๅธƒไธบๅŽŸ็”Ÿๅฏๆ‰ง่กŒๆ–‡ไปถ๏ผš

dotnet publish -c Release -r win-x64    # Windows
dotnet publish -c Release -r linux-x64  # Linux
dotnet publish -c Release -r osx-arm64  # macOS (Apple Silicon)

๐Ÿ“– ่ฏฆ็ป†ๆ–‡ๆกฃ๏ผš

ๆณจๆ„๏ผšAOT ๅŠŸ่ƒฝไป…ๅœจ .NET 8.0 ๅŠๆ›ด้ซ˜็‰ˆๆœฌๅฏ็”จใ€‚ๅฏนไบŽ่พƒๆ—ง็š„ๆก†ๆžถ๏ผŒๅบ“ๅฐ†่‡ชๅŠจไฝฟ็”จๆ ‡ๅ‡†็š„ JIT ็ผ–่ฏ‘ใ€‚

ๆณจๆ„ไบ‹้กน

  1. ๆณ•ๅพ‹ๅ’Œ้“ๅพทไฝฟ็”จ: ๆญคๅบ“ๅบ”ไป…็”จไบŽๅˆๆณ•็›ฎ็š„ใ€‚ไฝฟ็”จๆญคๅบ“็ป•่ฟ‡็ฝ‘็ซ™ไฟๆŠคๅฏ่ƒฝ่ฟๅๆœๅŠกๆกๆฌพๆˆ–ๅฝ“ๅœฐๆณ•ๅพ‹ใ€‚
  2. ๅŽŸ็”Ÿๅบ“ไพ่ต–: ้œ€่ฆ็กฎไฟ็›ฎๆ ‡ๅนณๅฐ็š„ๅŽŸ็”ŸๅŠจๆ€้“พๆŽฅๅบ“ๅฏ็”จใ€‚
  3. ๅ†…ๅญ˜็ฎก็†: ๅบ“ๅฎž็Žฐไบ† IDisposable๏ผŒไฝฟ็”จๅฎŒๆฏ•ๅŽๅบ”ๆญฃ็กฎ้‡Šๆ”พ่ต„ๆบใ€‚
  4. ็บฟ็จ‹ๅฎ‰ๅ…จ: ๆฏไธช TlsClient ๅฎžไพ‹็ปดๆŠค็‹ฌ็ซ‹็š„ไผš่ฏ๏ผŒๅปบ่ฎฎๆฏไธช็บฟ็จ‹ไฝฟ็”จ็‹ฌ็ซ‹ๅฎžไพ‹ใ€‚

่ฎธๅฏ่ฏ

ๆœฌ้กน็›ฎๅŸบไบŽ bogdanfinn/tls-client ๆž„ๅปบ๏ผŒ่ฏท้ตๅพช็›ธๅบ”็š„ๅผ€ๆบ่ฎธๅฏ่ฏใ€‚

็›ธๅ…ณ้“พๆŽฅ

่ดก็Œฎ

ๆฌข่ฟŽๆไบค Issue ๅ’Œ Pull Request ๆฅๆ”น่ฟ›่ฟ™ไธช้กน็›ฎใ€‚


ๆœ€ๅŽๆ›ดๆ–ฐ: 2025-10-23

About

HTTP Client with options to select specific client TLS Fingerprints to use for requests.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages