using System.Net.Sockets;
using NewLife;
using NewLife.Data;
using NewLife.Http;
using NewLife.Log;
using Xunit;
namespace XUnitTest.Http;
public class TinyHttpClientTest
{
private readonly TinyHttpClient _Client;
public TinyHttpClientTest()
{
_Client = new TinyHttpClient();
}
/// <summary>检查目标服务器是否可达</summary>
private static Boolean IsServerReachable(String host, Int32 port, Int32 timeoutMs = 2000)
{
try
{
using var client = new TcpClient();
var result = client.BeginConnect(host, port, null, null);
var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromMilliseconds(timeoutMs));
if (!success) return false;
client.EndConnect(result);
return true;
}
catch
{
return false;
}
}
//[Fact(DisplayName = "同步请求")]
//public void SendTest()
//{
// var uri = new Uri("http://newlifex.com");
// var client = new TinyHttpClient { Timeout = TimeSpan.FromSeconds(3), Log = XTrace.Log };
// var html = client.Send(uri, null)?.ToStr();
// Assert.True(!html.IsNullOrEmpty() && html.Length > 500);
// Assert.Equal(uri, client.BaseAddress);
//}
[Fact(DisplayName = "异步请求")]
public async Task SendAsyncTest()
{
// 在 CI 环境中跳过,因为目标服务器可能不可达
if (!IsServerReachable("newlifex.com", 80)) return;
var uri = new Uri("http://newlifex.com");
var req = new HttpRequest { RequestUri = uri };
var client = new TinyHttpClient { Timeout = TimeSpan.FromSeconds(3), Log = XTrace.Log };
var html = (await client.SendAsync(req))?.Body.ToStr();
Assert.True(!html.IsNullOrEmpty() && html.Length > 500);
Assert.Equal(uri, client.BaseAddress);
}
//[Fact(DisplayName = "同步字符串")]
//public void GetString()
//{
// var url = "http://x.newlifex.com";
// var client = new TinyHttpClient();
// var html = client.GetString(url);
// Assert.True(!html.IsNullOrEmpty() && html.Length > 500);
//}
[Fact(DisplayName = "异步字符串")]
public async Task GetStringAsync()
{
// 在 CI 环境中跳过,因为目标服务器可能不可达
if (!IsServerReachable("x.newlifex.com", 80)) return;
var url = "http://x.newlifex.com";
var client = new TinyHttpClient();
var html = await client.GetStringAsync(url);
Assert.True(!html.IsNullOrEmpty() && html.Length > 500);
}
[Fact(DisplayName = "https")]
public async Task GetStringHttps()
{
// 在 CI 环境中跳过,因为目标服务器可能不可达
if (!IsServerReachable("newlifex.com", 443)) return;
var url = "https://newlifex.com";
var client = new TinyHttpClient();
var html = await client.GetStringAsync(url);
Assert.True(!html.IsNullOrEmpty() && html.Length > 500);
}
}
|