Я разрабатываю консольное приложение C # для проверки того, действителен ли URL или работает. Он хорошо работает для большинства URL-адресов и может получать ответ с кодом состояния HTTP с целевого веб-сайта. Но при тестировании некоторых других URL-адресов приложение выдает исключение «Произошла ошибка при отправке запроса» при запуске метода HttpClient.SendAsync. Поэтому я не могу получить никакого ответа или кода состояния HTTP, даже если этот URL-адрес действительно работает в браузере. Я отчаянно пытаюсь выяснить, как поступить с этим делом. Если URL-адрес не работает или сервер отклоняет мой запрос, он должен, по крайней мере, предоставить мне соответствующий код состояния HTTP.
Вот упрощенный код моего тестового приложения:
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace TestUrl
{
class Program
{
static void Main(string[] args)
{
// var urlTester = new UrlTester("http://www.sitename.com/wordpress"); // works well and get 404
// var urlTester = new UrlTester("http://www.fc.edu/"); // Throw exception and the URL doesn't work
var urlTester = new UrlTester("http://www.ntu.edu.tw/english/"); // Throw exception and the URL works actually
Console.WriteLine("Test is started");
Task.WhenAll(urlTester.RunTestAsync());
Console.WriteLine("Test is stoped");
Console.ReadKey();
}
public class UrlTester
{
private HttpClient _httpClient;
private string _url;
public UrlTester(string url)
{
_httpClient = new HttpClient();
_url = url;
}
public async Task RunTestAsync()
{
var httpRequestMsg = new HttpRequestMessage(HttpMethod.Head, _url);
try
{
using (var response = await _httpClient.SendAsync(httpRequestMsg, HttpCompletionOption.ResponseHeadersRead))
{
Console.WriteLine("Response: {0}", response.StatusCode);
}
}
catch (Exception e)
{
}
}
}
}
}