#c# #.net #https #httpresponse
#c# #.net #https #httpresponse
Вопрос:
Я пытаюсь создать приложение Windows для отправки предупреждения, если веб-сайт не работает, сначала я написал эту элементарную форму, чтобы проверить, работает ли она.
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(textBox1.Text);
httpReq.AllowAutoRedirect = false;
HttpWebResponse httpRes = (HttpWebResponse)httpReq.GetResponse();
if (httpRes.StatusCode == HttpStatusCode.Found)
{
MessageBox.Show("It works.");
}
else
{
MessageBox.Show("Not able to ping");
}
httpRes.Close();
он работал нормально, но когда я захотел сделать то же самое для SSL-сайтов (https), это не сработало, я посмотрел его и добавил
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
но все же я не могу получить никакого ответа от сайтов https, я перепробовал много сайтов, поэтому я не думаю, что это проблема с сайтами, я новичок в .net. любая помощь приветствуется.
Комментарии:
1. Вы указываете «https» в URL, не так ли? Что вы видите, когда просматриваете код (с помощью отладчика)? Что в ответе?
2. Сертификат принят, но значение httpres по-прежнему равно null.
Ответ №1:
Я нашел проблему, ребята, https отвечал 200 (OK), тогда как http отвечал 302 (найдено), поэтому я просто изменил свое условие, чтобы добавить к нему 200, это работает как шарм. Для тех, кто интересуется рабочим кодом, вот он
public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
return true;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(textBox1.Text);
httpReq.AllowAutoRedirect = false;
HttpWebResponse httpRes = (HttpWebResponse)httpReq.GetResponse();
if (httpRes.StatusCode == HttpStatusCode.OK || httpRes.StatusCode==HttpStatusCode.Found)
{
MessageBox.Show("It works.");
}
else
{
MessageBox.Show("Not able to ping");
}
httpRes.Close();
}
С уважением,
Прасант