mirror of
https://github.com/NohamR/N_m3u8DL-RE.git
synced 2025-05-24 22:32:00 +00:00
87 lines
3.3 KiB
C#
87 lines
3.3 KiB
C#
using System;
|
|
using System.Collections.Concurrent;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Specialized;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Cache;
|
|
using System.Net.Http;
|
|
using System.Net.Http.Headers;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Web;
|
|
using N_m3u8DL_RE.Common.Log;
|
|
using N_m3u8DL_RE.Common.Resource;
|
|
|
|
namespace N_m3u8DL_RE.Common.Util
|
|
{
|
|
public class HTTPUtil
|
|
{
|
|
|
|
public static readonly HttpClient AppHttpClient = new(new HttpClientHandler
|
|
{
|
|
AllowAutoRedirect = true,
|
|
AutomaticDecompression = DecompressionMethods.All,
|
|
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true
|
|
})
|
|
{
|
|
Timeout = TimeSpan.FromMinutes(2)
|
|
};
|
|
|
|
private static async Task<HttpResponseMessage> DoGetAsync(string url, Dictionary<string, string>? headers = null)
|
|
{
|
|
Logger.Debug(ResString.fetch + url);
|
|
using var webRequest = new HttpRequestMessage(HttpMethod.Get, url);
|
|
webRequest.Headers.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
|
|
webRequest.Headers.CacheControl = CacheControlHeaderValue.Parse("no-cache");
|
|
webRequest.Headers.Connection.Clear();
|
|
if (headers != null)
|
|
{
|
|
foreach (var item in headers)
|
|
{
|
|
webRequest.Headers.TryAddWithoutValidation(item.Key, item.Value);
|
|
}
|
|
}
|
|
Logger.Debug(webRequest.Headers.ToString());
|
|
var webResponse = (await AppHttpClient.SendAsync(webRequest, HttpCompletionOption.ResponseHeadersRead)).EnsureSuccessStatusCode();
|
|
return webResponse;
|
|
}
|
|
|
|
public static async Task<byte[]> GetBytesAsync(string url, Dictionary<string, string>? headers = null)
|
|
{
|
|
byte[] bytes = new byte[0];
|
|
var webResponse = await DoGetAsync(url, headers);
|
|
bytes = await webResponse.Content.ReadAsByteArrayAsync();
|
|
Logger.Debug(HexUtil.BytesToHex(bytes, " "));
|
|
return bytes;
|
|
}
|
|
|
|
public static async Task<string> GetWebSourceAsync(string url, Dictionary<string, string>? headers = null)
|
|
{
|
|
string htmlCode = string.Empty;
|
|
var webResponse = await DoGetAsync(url, headers);
|
|
htmlCode = await webResponse.Content.ReadAsStringAsync();
|
|
Logger.Debug(htmlCode);
|
|
return htmlCode;
|
|
}
|
|
|
|
public static async Task<string> GetPostResponseAsync(string Url, byte[] postData)
|
|
{
|
|
string htmlCode = string.Empty;
|
|
using HttpRequestMessage request = new(HttpMethod.Post, Url);
|
|
request.Headers.TryAddWithoutValidation("Content-Type", "application/json");
|
|
request.Headers.TryAddWithoutValidation("Content-Length", postData.Length.ToString());
|
|
request.Content = new ByteArrayContent(postData);
|
|
var webResponse = await AppHttpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
|
|
htmlCode = await webResponse.Content.ReadAsStringAsync();
|
|
return htmlCode;
|
|
}
|
|
}
|
|
}
|