【问题标题】:Connecting through Https sites通过 Https 站点连接
【发布时间】:2011-04-26 18:34:41
【问题描述】:

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

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

【问题讨论】:

  • 感谢您的积分。你最终写了一些类似于我提供的示例代码的东西吗?

标签: .net vb.net api browser httplistener


【解决方案1】:

这是我编写的一些 C#.net 代码,用于通过 HTTPS 检索 XML。传入的“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;
    }

【讨论】:

    【解决方案2】:

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

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

    如果我不能这样做,我会使用内置的 WebClient 或 HttpWebRequest 类。你必须handle cookies manually,但这并不难。

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

    最后,我推荐turning on tracing for System.Net。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多