我正在为特定网站创建 API。 该 API 将采用可引用 DLL 的形式。 我已经尝试过正常的
HttpListener
但在通过 https 获取任何数据时会出错(基本上是有关当前登录用户的任何特定数据)。 我也无法使用它登录。 我的下一次尝试涉及一个隐藏的网络浏览器,但这就像听起来一样被黑客攻击(而且非常糟糕,因为网络浏览器喜欢中断当前正在运行其事件的进程)。 我需要一个可以运行且快速高效的系统(我知道,我知道,有点矛盾)。 有人知道该怎么做吗?
我使用的是 VB.net,因此任何 .net 代码示例都是可以接受的。
以下是我编写的一些用于通过 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;
}
因此,如果我想使用您的 API,我会下载您的 DLL 并与它对话,然后它又通过 HTTPS 与您的集中式系统对话?我那部分正确吗?
我的第一次尝试是构建一个 Web 服务并让我的 DLL 与之对话。 (实际上,如果可以的话,我不会打扰 DLL,但我知道你可能有你的理由。)
如果我做不到,我只会使用内置的 WebClient 或 HttpWebRequest 类。您必须手动处理cookie,但这并不难。
在处理 System.Net 时,有时必须设置一些全局属性,这些属性可以在 ServicePointManager 类中找到。具体来说,我想到了Expect100Continue、ServerCertificateValidationCallback 和 UseNagleAlgorithm。
最后,我建议打开 System.Net 的跟踪。
如果这对您没有帮助,您需要向我们提供一些有关“不起作用”的更多信息,例如您可能收到的任何错误消息。