若干更新

This commit is contained in:
2026-01-28 20:31:14 +08:00
parent 0ad49e0246
commit 9d0efbba80
2 changed files with 41 additions and 30 deletions

View File

@@ -1,5 +1,6 @@
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Net.Http;
using System.Text; using System.Text;
namespace Ramitta.lib namespace Ramitta.lib
@@ -14,8 +15,6 @@ namespace Ramitta.lib
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET"; request.Method = "GET";
request.Timeout = timeout; request.Timeout = timeout;
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36";
using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
using (Stream stream = response.GetResponseStream()) using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
@@ -29,44 +28,56 @@ namespace Ramitta.lib
} }
} }
public static async Task<string> SendHttpPostAsync(string url, string jsonData, int timeout = 10000) public static async Task<string> SendHttpPostAsync(string url, string jsonData, int timeout = 10000, bool bypassProxy = true)
{ {
try try
{ {
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); var handler = new HttpClientHandler();
request.Method = "POST";
request.Timeout = timeout;
request.ContentType = "application/json";
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
byte[] data = Encoding.UTF8.GetBytes(jsonData); if (bypassProxy)
request.ContentLength = data.Length;
using (Stream requestStream = await request.GetRequestStreamAsync())
{ {
await requestStream.WriteAsync(data, 0, data.Length); // 方法1不使用代理
handler.UseProxy = false;
handler.Proxy = null;
// 方法2指定某些地址不代理
// handler.Proxy = new WebProxy();
// handler.UseProxy = true;
// handler.PreAuthenticate = true;
}
else
{
// 使用系统代理
handler.UseProxy = true;
handler.Proxy = WebRequest.GetSystemWebProxy();
} }
using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) // 可选:禁用自动重定向
using (Stream responseStream = response.GetResponseStream()) handler.AllowAutoRedirect = false;
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
using (var client = new HttpClient(handler))
{ {
return await reader.ReadToEndAsync(); client.Timeout = TimeSpan.FromMilliseconds(timeout);
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
// 确保成功状态
if (!response.IsSuccessStatusCode)
{
var errorContent = await response.Content.ReadAsStringAsync();
throw new Exception($"HTTP错误 {(int)response.StatusCode} ({response.StatusCode}): {errorContent}");
}
return await response.Content.ReadAsStringAsync();
} }
} }
catch (WebException ex) catch (HttpRequestException ex)
{ {
WebResponse errorResponse = ex.Response; throw new Exception("HTTP请求失败: " + ex.Message);
if (errorResponse is HttpWebResponse httpErrorResponse) }
{ catch (TaskCanceledException ex)
using (Stream errorStream = httpErrorResponse.GetResponseStream()) {
using (StreamReader errorReader = new StreamReader(errorStream, Encoding.UTF8)) throw new Exception("请求超时: " + ex.Message);
{
string errorContent = await errorReader.ReadToEndAsync();
throw new Exception($"HTTP错误 {(int)httpErrorResponse.StatusCode} ({httpErrorResponse.StatusCode}): {errorContent}");
}
}
throw new Exception("网络错误: " + ex.Message);
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework> <TargetFramework>net8.0-windows</TargetFramework>