通过 Https 站点连接

问题描述 投票:0回答:2

我正在为特定网站创建 API。 该 API 将采用可引用 DLL 的形式。 我已经尝试过正常的

HttpListener
但在通过 https 获取任何数据时会出错(基本上是有关当前登录用户的任何特定数据)。 我也无法使用它登录。 我的下一次尝试涉及一个隐藏的网络浏览器,但这就像听起来一样被黑客攻击(而且非常糟糕,因为网络浏览器喜欢中断当前正在运行其事件的进程)。 我需要一个可以运行且快速高效的系统(我知道,我知道,有点矛盾)。 有人知道该怎么做吗?

我使用的是 VB.net,因此任何 .net 代码示例都是可以接受的。

.net vb.net browser httplistener
2个回答
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;
    }

1
投票

因此,如果我想使用您的 API,我会下载您的 DLL 并与它对话,然后它又通过 HTTPS 与您的集中式系统对话?我那部分正确吗?

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

如果我做不到,我只会使用内置的 WebClientHttpWebRequest 类。您必须手动处理cookie,但这并不难。

在处理 System.Net 时,有时必须设置一些全局属性,这些属性可以在 ServicePointManager 类中找到。具体来说,我想到了Expect100Continue、ServerCertificateValidationCallback 和 UseNagleAlgorithm

最后,我建议打开 System.Net 的跟踪

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

© www.soinside.com 2019 - 2024. All rights reserved.