#c#
#c#
Вопрос:
Я пытаюсь создать функцию, которая проверяет, подключен ли сайт к сети или нет, но у меня возникли некоторые проблемы с временем ожидания. Я хочу ограничить его максимум 3 секундами, если в течение 3 секунд нет ответа, я должен видеть страницу как автономную.
Моя попытка:
class OnlineCheck
{
public static bool IsOnline(string url)
{
try
{
WebClient webclient = new WebClient();
webclient.Headers.Add(HttpRequestHeader.KeepAlive, "1000");
webclient.OpenRead(url);
}
catch { return false; }
return true;
}
}
Ответ №1:
WebClient не поддерживает время ожидания. Но вы можете использовать HttpWebRequest!
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Endpoint);
request.Timeout=3000;
request.GetResponse();
Ответ №2:
Если вы хотите проверить, что сайт подключен к Сети, на самом деле вас интересует не содержимое страницы, а только то, что вы получаете ответ. Чтобы сделать это более эффективным, вы должны запрашивать только заголовки http. Вот краткий пример того, как вы могли бы сделать:
private static IEnumerable<HttpStatusCode> onlineStatusCodes = new[]
{
HttpStatusCode.Accepted,
HttpStatusCode.Found,
HttpStatusCode.OK,
// add more codes as needed
};
private static bool IsSiteOnline(string url, int timeout)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
{
if (request != null)
{
request.Method = "HEAD"; // get headers only
request.Timeout = timeout;
using (var response = request.GetResponse() as HttpWebResponse)
{
return response != null amp;amp; onlineStatusCodes.Contains(response.StatusCode);
}
}
}
return false;
}
Ответ №3:
Используйте HttpWebRequest, а не WebClient. Класс HttpWebRequest имеет свойство timeout.
Ответ №4:
Вы можете попробовать этот код:
System.Net.WebRequest r = System.Net.WebRequest.Create("http://www.google.com");
r.Timeout = 3000;
System.Net.WebProxy proxy = new System.Net.WebProxy("<proxy address>");
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential();
credentials.Domain = "<domain>";
credentials.UserName = "<login>";
credentials.Password = "<pass>";
proxy.Credentials = credentials;
r.Proxy = proxy;
try
{
System.Net.WebResponse rsp = r.GetResponse();
}
catch (Exception)
{
MessageBox.Show("Is not avaliable");
return;
}
MessageBox.Show("Avaliable!");
Ответ №5:
static bool isOnline (string URL)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Timeout = 3000;
try
{
WebResponse resp = request.GetResponse();
}
catch (WebException e)
{
if (((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.NotFound)
{
return false;
}
}
return true;
}