2009-10-31 1 views
1

Я экспериментирую с HttpWebRequest, и мне нужно заставить его работать с SSL. Он работает на некоторых веб-сайтах (например, PayPal), но не на тех, на которых я действительно хочу работать, таких как this сайт сообщества (URL-адрес также находится в образце кода). Почему это? Сертификаты (я предполагаю, что это может быть проблема) выглядят ужасно похожими.HttpWebRequest SSL работает только на некоторых веб-сайтах

public static bool AcceptAllCertificatePolicy(object sender, 
              X509Certificate certificate, 
              X509Chain chain, 
              SslPolicyErrors sslPolicyErrors) 
    { 
     return true; 
    } 

    static void LoginTest() 
    { 

     ServicePointManager.ServerCertificateValidationCallback += AcceptAllCertificatePolicy; 

     HttpWebRequest req = (HttpWebRequest) 
     WebRequest.Create("https://steamcommunity.com"); 

     req.Method = "GET"; 

     req.CookieContainer = new CookieContainer(); 

     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

     Console.WriteLine("Cookies:" + resp.Cookies.Count + "\r\n" + resp.ResponseUri); 
     Console.WriteLine(resp.Headers); 

     resp.Close(); 
    } 

Благодаря

EDIT: URL неверен, извините. Однако проблема сохраняется.

EDIT2: Я забыл упомянуть, что, хотя он не дает мне никаких ошибок, он не возвращает никаких файлов cookie. Это то, что я действительно переживаю. www.paypal.com дает мне 7 печенье, заголовки ответа быть

Pragma: no-cache 
Cache-Control: private 
Date: Sat, 31 Oct 2009 12:10:29 GMT 
Expires: Thu, 05 Jan 1995 22:00:00 GMT 
Set-Cookie: LANG=sv_SE%3bSE; expires=Tue, 29-Oct-2019 12:10:30 GMT; domain=.paypal.com; path=/,cookie_check=yes; expires=Tue, 29-Oct-2019 12:10:30 GMT; domain=.paypal.com; path=/,navcmd=_home-general; domain=.paypal.com; path=/,consumer_display=USER_HOMEPAGE%3d0%26USER_TARGETPAGE%3d0%26USER_FILTER_CHOICE%3d7%26BALANCE_MODULE_STATE%3d1%26GIFT_BALANCE_MODULE_STATE%3d1%26LAST_SELECTED_ALIAS_ID%3d0; expires=Sun, 31-Oct-2010 12:10:30 GMT; domain=.paypal.com; path=/,cwrClyrK4LoCV1fydGbAxiNL6iG=_Yi2Io2xQuP5-kmjAhh1KUJVMH6VTFfnf1Zlw1ONf41yAAUyLXUiLZ_9GJcPZmmNMl6kgpaG14eNnVA6jYlkyaK7h2IPqoPUsUobSg-gzEf4NsHrbwWzuCe8W50EIPW4ABaAkG%7c3EWGI8_elkol97q63exWWZMOA02gaDHo4_Y_7lKC_xHE2kWR8DZGXAmqs4uv075KRh6OW0%7ctJQpXroB_JJPd9EvK7Xx17DfiF9lz5vs06ThWWluWxwM3-WO82KChgIGdC080wwm5Q6vL0%7c1256991030; domain=.paypal.com; path=/,navlns=0.0; expires=Fri, 26-Oct-2029 12:10:30 GMT; domain=.paypal.com; path=/,Apache=10.190.11.252.1256991029926042; path=/; expires=Fri, 18-Sep-03 05:42:13 GMT 
Server: Apache 
Vary: Accept-Encoding 
Strict-Transport-Security: max-age=500 
Transfer-Encoding: chunked 
Content-Type: text/html; charset=UTF-8 

пока steamcommunity.com приводит 0 печенье быть установлен,

Pragma: no-cache 
Connection: close 
Transfer-Encoding: chunked 
Cache-Control: no-cache 
Content-Type: text/html; charset=UTF-8 
Date: Sat, 31 Oct 2009 12:14:25 GMT 
Expires: Mon, 26 Jul 1997 05:00:00 GMT 
Server: Apache 

, даже если он должен установить хотя бы один.

ответ

1

Установите поджигатель для светлячок. Очистите кеш-файл cookie, а затем перейдите на сайт. Проверьте firebug, чтобы узнать, какой именно запрос отправлен браузером. Затем повторите тот же запрос, используя код. Это означает репликацию всех заголовков, отправленных браузером.

Некоторые серверы не будут отправлять файлы cookie, если они не считают, что это браузер, выдающий запрос. Таким образом, все заголовки запросов должны отображаться на сайте, как если бы браузер запрашивал страницы.

+0

Это сделало трюк. Спасибо, ребята. – pastapockets

0

Проблема в том, что сертификат недействителен для https://www.steamcommunity.com, но для https://steamcommunity.com. Так что все, что вам нужно сделать, это изменить свой адрес:

WebRequest.Create("https://steamcommunity.com"); 

Посмотрите на заголовок Issued to. Для PayPal это Issued to: www.paypal.com, в то время как для вашего сайта это Issued to: steamcommunity.com


UPDATE:

new WebClient().DownloadString("https://steamcommunity.com"); // works 
new WebClient().DownloadString("https://www.steamcommunity.com"); // throws invalid certificate 
+0

Это была опечатка, когда я изменил URL-адрес, и он не работает без www. – pastapockets

+0

Ну, это сработало для меня, посмотри обновление. –

+0

Извините, я не смог правильно указать свой оригинальный запрос. Теперь он обновлен. – pastapockets

 Смежные вопросы

  • Нет связанных вопросов^_^