我正在为特定网站创建API。此API将采用可参考的DLL的形式。我已经尝试了普通的HttpListner但是在获取通过https的任何数据时出错(基本上是关于当前登录用户的任何特定内容)。我也无法使用它登录。我的下一次尝试涉及一个隐藏的webbrowser,但这就像听起来一样(并且因为WebBrowser喜欢中断当前正在运行其事件的进程而非常小看)。我需要一个有效且快速有效的系统(我知道,我知道,这是一种矛盾)。有人知道怎么做吗?
我正在使用VB.net,所以任何.net代码示例都可以接受。谢谢,如果可以的话!
答案 0 :(得分:1)
因此,如果我想使用您的API,我会下载您的DLL并与之交谈,然后依次通过HTTPS与您的集中式系统进行通信?我的那部分是否正确?
我的第一次尝试就是建立一个Web服务并让我的DLL与之对话。 (实际上,如果可以,我不会打扰DLL,但我知道你可能有你的理由。)
如果我不能这样做,我会使用内置的WebClient或HttpWebRequest类。你必须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;
}