HttpWebRequest SSL работает только на некоторых сайтах - PullRequest
1 голос
/ 31 октября 2009

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

    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();
    }

Спасибо

РЕДАКТИРОВАТЬ: URL был неправильный, извините. Проблема сохраняется, хотя.

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

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 файлов cookie,

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

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

Ответы [ 2 ]

1 голос
/ 01 ноября 2009

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

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

0 голосов
/ 31 октября 2009

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...