Создайте веб-запрос SSL с C # - PullRequest
3 голосов
/ 27 ноября 2011

Я делаю код, который читает страницу и загружает ее содержимое программным способом, но он не работает так же, как браузер.Обратите внимание, что я также использую строку cookie.

мой код:

string strUrl = "http:" + "//mgac.webex." + "com";
string cookies_str = "vSeg=post_attendee; s_nr=1321305381566-New; s_lv=1321305381566; s_vnum=1322686800567%26vn%3D1; galaxyb_wl=R2355168776; JSESSIONID=Qlq1TR7Hf09KTsGHr4vv2GnTFF0NGRlLmGyYmMvzY5M29pbZ8yNp!31020270; DetectionBrowserStatus=3|1|32|1|4|2; CK_LanguageID_503319=1; CK_TimeZone_503319=4; CK_RegionID_503319=2; vSeg=post_attendee; s_nr=1321305381566-New; s_lv=1321305381566; s_vnum=1322686800567%26vn%3D1; galaxyb_wl=R2355168776; JSESSIONID=Qlq1TR7Hf09KTsGHr4vv2GnTFF0NGRlLmGyYmMvzY5M29pbZ8yNp!31020270;";
string other_saved_cookies = "screenWidth=1280; CK_CDNHostStatus=akamaicdn.webex.com|1322367753273|1";

string s;
using (WebClient client = new WebClient())
{
    client.UseDefaultCredentials = true;
    client.Headers.Add(HttpRequestHeader.Cookie, cookies_str);
    s = client.DownloadString(strUrl);
}

Я получаю ответ: «Страница не найдена ...»

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

Как я могу сделать точно такой же запрос для получения контента, подобного браузеру

Где находится информация, которая сообщает клиенту : «Требуется SSL-соединение»?

Ответы [ 4 ]

6 голосов
/ 27 ноября 2011

Это похоже на то, что вы после Как использовать HTTP GET-запрос в C # с SSL? (нарушение протокола)

Но изменение «http» на «https» может быть хорошей отправной точкой!
Затем, по-видимому, установите ServicePointManager.ServerCertificateValidationCallback, как показано в 2 ответах на вышеуказанный пост.

EDIT

Добавить

string ua = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0";

1012 * тогда *

client.Headers.Add(HttpRequestHeader.UserAgent, ua);

Затем проанализируйте заголовок Location перенаправленного результата.

2 голосов
/ 01 декабря 2011

Этот веб-сайт использует 302 перенаправления для перехода на страницу SSL.

Класс WebClient .NET - это интеллектуальный класс, который автоматически выполняет перенаправления. Он использует класс HttpWebRequest и устанавливает для AllowAutoRedirect значение true.

Таким образом, если вы отправите запрос на исходный URL-адрес, WebClient перешагнет через перенаправления (используя новые запросы), а результат будет 302 (какое-то перенаправление). Если код результата отличается, вы получите результат. Похоже на один http-запрос, но он выполняет 2 http и 1 https.

В этом случае пользовательский агент должен быть настроен как шунтировавший его ранее, поскольку удаленному сайту не нравится пользовательский агент по умолчанию .NET: нет.

1 голос
/ 27 ноября 2011

Проверьте эту ссылку msdn Безопасность HTTP и веб-службы ASP.NET

По умолчанию флажок Требовать безопасный канал (SSL) снят; выберите его, чтобы требовать SSL. SSL поддерживает как 40-битные, так и 128-битные шифрование. Чем больше бит используется шифрованием, тем сложнее разбить его и выяснить, какие были оригинальные биты.

Как только вы настроите ресурс для использования SSL для связи, любые сообщения, отправленные между отправителем и получателем, будут зашифрованы и подписано. Это означает, что сторонние лица не могут читать содержимое сообщений. Если внешняя сторона изменяет байты в сообщении, получатель сообщения может его обнаружить.

Вам понадобится некоторая информация об учетных данных или сертификате для идеального запуска вашего кода.

Вы можете использовать делегат RemoteCertificateValidationCallback для проверка SSL-сертификата

Проверьте эти ссылки для справки кода:

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);

Как использовать HTTP GET-запрос в C # с SSL? (нарушение протокола)

Как использовать WebRequest для доступа к зашифрованному SSL-сайту с использованием https?

0 голосов
/ 01 декабря 2011

Если вы просто хотите загрузить страницу через https (ssl), это будет работать.Если вы хотите взглянуть на сертификат, я рекомендую использовать метод полного delgate

ServicePointManager.ServerCertificateValidationCallback = ( ( sender , certificate , chain , sslPolicyErrors ) => true );         //allows for validation of SSL certificates 

или метод полного делегата

ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback( delegateHttpSsl );

        private bool delegateHttpSsl(object obj, System.Security.Cryptography.X509Certificate c1, System.Security.Cryptography.X509Certifciates.X509Chain c2, SslPolicyErrors c3)
        {
              return true;
        }
...