2016-04-27 2 views
0

Я пытаюсь проверить наши сертификаты SSL с помощью программы, но у меня есть проблема; Я не могу использовать второй HttpWebRequest из-за чего-то, чего я не знаю. Я предположил, что это проблема с кешем, и использовал все коды без кэша, которые я знаю. Поскольку вы можете видеть, что серверы находятся в нашей частной подсети, а на 1 сервере много приложений IIS. Из-за этого я изменяю переменную «request.Host» на наши соответствующие привязки IIS для открытия сайтов. Всегда второй не работает, но первый работает хорошо. В чем проблема?C# WebRequest (400) Плохой запрос при втором вызове

  HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://" + "10.10.11.100"); 
      request.AllowAutoRedirect = false; 
      request.Host = "www.xxx.com"; 
      request.Timeout = 30 * 1000; 
      request.Headers.Add("Cache-Control", "no-cache"); 
      request.Referer = null; 
      request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); 
      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       //retrieve the ssl cert and assign it to an X509Certificate object 
       X509Certificate cert = request.ServicePoint.Certificate; 
       //convert the X509Certificate to an X509Certificate2 object by passing it into the constructor 
       X509Certificate2UI.DisplayCertificate(new X509Certificate2(cert)); 
      } 
      HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create("https://" + "10.10.11.100"); 
      request2.AllowAutoRedirect = false; 
      request2.Host = "www.yyy.com"; 
      request2.Timeout = 30 * 1000; 
      request2.Headers.Add("Cache-Control", "no-cache"); 
      request2.Referer = null; 

      request2.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); 
      using (HttpWebResponse response2 = (HttpWebResponse)request2.GetResponse()) 
      { 
       //retrieve the ssl cert and assign it to an X509Certificate object 
       X509Certificate cert2 = request2.ServicePoint.Certificate; 
       //convert the X509Certificate to an X509Certificate2 object by passing it into the constructor 
       X509Certificate2UI.DisplayCertificate(new X509Certificate2(cert2)); 
      } 

Ошибка:

 The remote server returned an error: (400) Bad Request. 

Исключение строки:

using (HttpWebResponse response2 = (HttpWebResponse)request2.GetResponse()) 

Статус: ProtocolError

InternalStatus: RequestFatal

+0

Вы попробовали обменять заказ, чтобы узнать, не является ли проблема со вторым сервером? – WillG

+1

Да, я сделал. Если я изменяю порядок, первый работает как раньше. –

ответ

0

я решил мою проблему. Проблема заключалась в атрибуте keep-alive, и из-за этого второе SSL-соединение не инициализировалось должным образом. Вы должны добавить эту строку в свои запросы.

 request.KeepAlive = false; 
Смежные вопросы