我的申请旨在加快从我们的电话系统中检索电话信息。 获取此信息的最佳方法是在电话系统的Web界面上创建新搜索,并将结果导出到Excel电子表格,然后我的应用程序将其导入到DataSet中。
要获取导出,请从登录屏幕进行以下操作:
每天手动完成这项工作并不是一件大事,但是,为了可靠性,如果我能让我的应用程序在每天第一次启动时自动执行此操作,那将会非常棒。 由于公司中有超过1人将使用此应用程序,因此使用Windows服务会更好。
我不知道它是否有帮助,但系统是Datatex Topaz新一代电话管理系统:http://www.datatex.co.za/downloads/index.html#TNG
有人能给我一个基本的想法吗?
此外,任何人都可以将链接(在评论中,如果需要)发布到我可以了解更多有关如何执行此操作的页面吗?
答案 0 :(得分:2)
我做过类似于从网站上获取信息的内容。我无法给你一个确切的答案。但我们的想法是将登录信息发送到带有表单值的页面。如果网站依赖于cookie,您可以使用此cookie感知WebClient:
public class CookieAwareWebClient : WebClient
{
private CookieContainer cookieContainer = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = cookieContainer;
}
return request;
}
}
你应该知道有些网站依赖于传递的会话ID,所以我做的第一件事就是从页面中获取会话ID:
var client = new CookieAwareWebClient();
client.Encoding = Encoding.UTF8;
var indexHtml = client.DownloadString(*index page url*);
string sessionID = fetchSessionID(indexHtml);
然后我必须登录到您可以通过将值上传到页面来执行的页面。您可以使用“查看源”查看特定的表单元素,但您必须知道一些HTML才能执行此操作。
var values = new NameValueCollection();
values.Add("sessionid", sessionID); //Fetched session id
values.Add("brugerid", args[0]); //Username in my case
values.Add("adgangskode", args[1]); //Password in my case
values.Add("login", "Login"); //The login button
//Logging in
client.UploadValues(*url to login*, values); //If all goes perfect, I'm logged in now
然后我可以下载我需要的页面。在您的情况下,如果文件始终具有相同的URL(例如Export.aspx?From = 2010-10-10& To = 2010-11-11)或UploadValues(...),则可以使用DownloadFile(...)您可以像以前一样指定值,但保存结果。
string html = client.DownloadString(*url*);
看起来你的步骤比我做的要多得多。但原则是一样的。要查看您发送到站点登录等的值,您可以使用Fiddler(windows)等程序来捕获正在进行的活动。基本的,你只是做同样的事情,但要注意会话ID等,这是暂时的。
最好的想法是使用一些本地方式来获取数据,但如果没有得到代码,数据库等,你必须以丑陋的方式去做。您可能还需要一个HTML解析器来获取数据( ups,您没有,因为您导出到文件)。最后但同样重要的是,请记住,页面可能会发生变化,并且很有可能无法登录,解析等。
请询问您是否不确定发生了什么。
<强> ADDITION 强>
CookieAwareWebClient不是我的代码:
我还找到了一些相关主题:
答案 1 :(得分:0)
使用HTTP客户端,您需要执行以下操作:
这意味着您需要程序中可以执行HTTP,cookie,身份验证和表单的某些类或组件。有了这个,您就可以执行用户所做的相同请求。