通过Https网站连接

时间:2011-04-26 18:34:42

标签: .net vb.net api browser httplistener

我正在为特定网站创建API。此API将采用可参考的DLL的形式。我已经尝试了普通的HttpListner但是在获取通过https的任何数据时出错(基本上是关于当前登录用户的任何特定内容)。我也无法使用它登录。我的下一次尝试涉及一个隐藏的webbrowser,但这就像听起来一样(并且因为WebBrowser喜欢中断当前正在运行其事件的进程而非常小看)。我需要一个有效且快速有效的系统(我知道,我知道,这是一种矛盾)。有人知道怎么做吗?

我正在使用VB.net,所以任何.net代码示例都可以接受。谢谢,如果可以的话!

2 个答案:

答案 0 :(得分:1)

因此,如果我想使用您的API,我会下载您的DLL并与之交谈,然后依次通过HTTPS与您的集中式系统进行通信?我的那部分是否正确?

我的第一次尝试就是建立一个Web服务并让我的DLL与之对话。 (实际上,如果可以,我不会打扰DLL,但我知道你可能有你的理由。)

如果我不能这样做,我会使用内置的WebClientHttpWebRequest类。你必须handle cookies manually但不是那么难。

在处理System.Net时,您有时必须设置一些可在ServicePointManager类中找到的全局属性。特别是Expect100Continue,可以想到ServerCertificateValidationCallback和UseNagleAlgorithm

最后,我建议turning on tracing for System.Net

如果这对您没有帮助,您需要向我们提供一些有关“无效”的信息,例如您可能收到的任何错误消息。

答案 1 :(得分:1)

这是我用来通过HTTPS检索XML的一些C#.net代码。传入的“url”参数是您从中获取数据的https资源的URL。真正棘手的部分是让它将cookie传递给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;
    }