Подключение через сайты Https - PullRequest
2 голосов
/ 26 апреля 2011

Я создаю API для определенного сайта.Этот API будет в форме ссылочной DLL.Я попробовал нормальный HttpListner, но он получает ошибки при получении любых данных через https (в основном что-то конкретное о текущем вошедшем в систему пользователе).Я также не могу войти, используя его.Моя следующая попытка включала скрытый веб-браузер, но он так же взломан, как и звучит (и очень странно, поскольку веб-браузер любит прерывать процессы, которые в данный момент выполняются с его событиями).Мне нужна система, которая работает и работает быстро и эффективно (я знаю, я знаю, что-то вроде оксюморон).Кто-нибудь знает, как это сделать?

Я использую VB.net, поэтому любые примеры кода .net приемлемы.Спасибо, если можете!

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Вот код C # .net, который я написал для извлечения XML через HTTPS. Передаваемый параметр "url" - это URL-адрес ресурса https, с которого вы получаете данные. Действительно сложная задача - заставить куки передавать на HTTPS-сервер.

    private XmlDocument getXmlDataFromWebServer(string url)
    {
        System.Net.HttpWebRequest rq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
        System.Net.CookieContainer container = new System.Net.CookieContainer();
        for (int i = 0; i < System.Web.HttpContext.Current.Request.Cookies.Count; i++)
        {
            System.Web.HttpCookie httpcookie = System.Web.HttpContext.Current.Request.Cookies[i];
            string name = httpcookie.Name;
            string value = httpcookie.Value;
            string path = httpcookie.Path;
            string domain = "MySecureDomain.com";
            System.Net.Cookie cookie = new System.Net.Cookie(name, value, path, domain);
            container.Add(cookie);
        }

        rq.CookieContainer = container;
        rq.Timeout = 10000;
        rq.UserAgent = "My web site Server Side Code";

        System.Net.HttpWebResponse rs = (System.Net.HttpWebResponse)rq.GetResponse();
        System.Text.Encoding enc = System.Text.Encoding.GetEncoding(1252);
        System.IO.StreamReader reader = new System.IO.StreamReader(rs.GetResponseStream());
        System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
        xml.Load(rs.GetResponseStream());
        return xml;
    }
1 голос
/ 02 мая 2011

Итак, если я хочу использовать ваш API, я загружаю вашу DLL и говорю с ней, а она, в свою очередь, затем обращается к вашей централизованной системе через HTTPS? Я правильно понял эту часть?

Моей первой попыткой было бы просто создать веб-сервис и попросить мою DLL обсудить это. (На самом деле, я не стал бы беспокоиться о DLL, если бы мог, но я понимаю, что у вас, вероятно, есть свои причины.)

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

При работе с System.Net иногда приходится устанавливать некоторые глобальные свойства, которые можно найти в классе ServicePointManager . В частности, на ум приходят Expect100Continue , ServerCertificateValidationCallback и UseNagleAlgorithm .

Наконец, я бы рекомендовал включить трассировку для System.Net .

Если это не поможет вам, вам необходимо предоставить нам дополнительную информацию о том, что «не работает», например, сообщения об ошибках, которые вы можете получать.

...