我是在电信工作的,应部门要求,开发一个分析话费的系统,但是我不会提取所需要的数据,想请大家帮忙出注意:具体情况如下:
1、公司已经有了一个计费系统,基于网页的B/S结构,公司不愿意对本部门提供该系统的技术支持,更不愿意公布接口参数,也就是说现在只知道其使用XML格式下载加密的话费信息到浏览器,并在浏览器使用脚本 + 控件的形式进行解密重组数据块后,最后将最终话费显示在屏幕上面。对于解密机制目前还无法分析通过什么算法。注意:本帖要解决的问题就是:我需要的是显示在屏幕上的那些话费信息,以做更进一步的话费分析。
2、我使用C#的asp.net进行开发,我设想用asp.net服务器向计费系统请求网页,并在服务器上做分析,分析结果发送给asp.net用户。
请大家提供方法提取网页上显示的数据,可以通过多种方法来提取,比如使用脚本语言等,但最好是用asp.net进行提取所需数据,毕竟我对asp.net比较熟悉,我想给大家更多分数,但csdn上我最大只能给100分,很抱歉。
1、公司已经有了一个计费系统,基于网页的B/S结构,公司不愿意对本部门提供该系统的技术支持,更不愿意公布接口参数,也就是说现在只知道其使用XML格式下载加密的话费信息到浏览器,并在浏览器使用脚本 + 控件的形式进行解密重组数据块后,最后将最终话费显示在屏幕上面。对于解密机制目前还无法分析通过什么算法。注意:本帖要解决的问题就是:我需要的是显示在屏幕上的那些话费信息,以做更进一步的话费分析。
2、我使用C#的asp.net进行开发,我设想用asp.net服务器向计费系统请求网页,并在服务器上做分析,分析结果发送给asp.net用户。
请大家提供方法提取网页上显示的数据,可以通过多种方法来提取,比如使用脚本语言等,但最好是用asp.net进行提取所需数据,毕竟我对asp.net比较熟悉,我想给大家更多分数,但csdn上我最大只能给100分,很抱歉。
解决方案 »
- 请教样式问题
- C语言的求素数的问题 好心人快来帮我看看啊
- 为什么 AjaxControlToolkit 3.5 sp1 自带的 AutoComplete 源码 在 IE7 显示为 undefined , 运行时截图如下
- 没完没了的问题
- [求助]请问我想建立2级分类表,怎么办?
- 将DataGrid内容导出成Excel文件有问题
- 如何使用ItemCommand读取Repeater绑定数据(在线等)
- 关于在一个CS文件中引用另一个CS文件里的类
- 高手帮帮忙。。。
- 请问通过置那个属性可以使checkboxlist的所有Item一起被选中。
- 100分了,该询问框如何写,解决问题的立即结帖。。。。。。
- asp.net 汇出excel 大量数据处理办法
做个<iframe src = "计费网址" id="sFrameName" height=0 />
var doc = document.frames("sFrameName").document;
分析 这个 doc 的 dom
<iframe src = "计费网址" id="sFrameName" height=0 onload = "分析的js"/>
httpRequest
public string Get_Http(string a_strUrl)
{
string strResult;
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(a_strUrl);
myReq.Method = "GET";
myReq.Accept = "*/*";
myReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"; try
{
HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse(); string tmp = myReq.Headers.ToString(); Stream myStream = HttpWResp.GetResponseStream(); StreamReader sr = new StreamReader(myStream, Encoding.UTF8);
StringBuilder strBuilder = new StringBuilder();
while (-1 != sr.Peek())
{
strBuilder.Append(sr.ReadLine() + "\r\n");
} strResult = strBuilder.ToString();
myStream.Close();
sr.Close(); }
catch (Exception exp)
{
strResult = "错误:" + exp.Message;
}
return strResult; }
主要用到这个方法,把页面放到a_strUrl中,然后遍历参数的值。再结合正则表达式。
HttpRequest,webclient ,都不行,主要是因为以上只能下载网页的源码,而无法执行网页内的javascript,webbrowser因该可以,但在客户端使用就比较麻烦啦
“浏览器使用脚本 + 控件的形式进行解密重组数据块后”
中的控件是指的浏览器端需要安装的那种ActiveX控件或者java Aplet控件吗?1 如果是这两种控件,及时你获取到了网页,也不能做源码分析的。
2 如果那个控件是服务器端控件,浏览器端能解释成一般的HTML,那么楼主可以采用AJAX的方式进行web请求,获取到请求页的返回HTML后,可用javascript中的模式匹配、split之类的方法进行源码分割。然后再使用javascript提取有用部分的数据做成数组之类的参数,传递给后台的分析计算Webservice方法获取目标页HTML,并用javascript进行提取有效部分的方法可以参照我博客的文章:
《小巧适用的AJAX英汉汉英字典》
http://www.cnblogs.com/heekui/archive/2007/01/31/635762.html
//获取中国标准时间(由美国官方时间折算)
private void GetNistTimeCN( out string time, out string Data )
{
try
{
//nist.time.gov的url
string strNistUrl = "http://nist.time.gov/timezone.cgi?UTC/s/0"; //构造并实例化一个WebRequest
System.Net.WebRequest myHttpWebRequest = System.Net.HttpWebRequest.Create( strNistUrl );
//设置连接超时时间
myHttpWebRequest.Timeout = 8000;
//设置WebResponse,接收返回信息
System.Net.WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse();
//获取返回信息流信息
Stream sr = myHttpWebResponse.GetResponseStream();
//设置流阅读器
StreamReader reader = new StreamReader(sr, System.Text.Encoding.ASCII);
//流输出为字符串
String srdata = reader.ReadToEnd();
//将返回html文本中的双引号变为单引号
srdata = srdata.Replace( "\"","\'");
//用模式匹配加分割的方式定位和获取时间信息
string strOut = Regex.Split( srdata, "color='white'><b>" , RegexOptions.IgnoreCase)[1];
string strTime = Regex.Split( strOut , "<br>", RegexOptions.IgnoreCase )[0];
//小时需调整,因时区相差8小时
time = DateTime.Parse( strTime ).AddHours( 8 ).ToLongTimeString(); //用模式匹配加分割的方式定位和获取日期信息
string strOut1 = Regex.Split( srdata, "'5' color='white'>" , RegexOptions.IgnoreCase)[1];
string strData = Regex.Split( strOut1 , "<br>", RegexOptions.IgnoreCase )[0];
//获取中国时间-小时部分
int intHourCn = int.Parse( time.Split( ':' )[0] );
//获取美国时间-小时部分
int intHourUS = int.Parse( DateTime.Parse( strTime ).ToLongTimeString().Split( ':' )[0] );
//比较小时差异,调整日期差异
if ( intHourCn < intHourUS )
{
Data = DateTime.Parse( strData ).AddDays(1).ToShortDateString();
}
else
{
Data = DateTime.Parse( strData ).ToShortDateString();
}
}
catch( System.Exception ex )
{
time = string.Empty;
Data = string.Empty;
MessageBox.Show( "获取时间出错:" + ex.Message );
}
}
webresponse获取数据
webrequest请求数据
webresponse获取数据能说得详细一点吗?
System.Net.WebResponse
牛比人物呀
private void GetNistTimeCN( out string time, out string Data )
{
try
{
//nist.time.gov的url
string strNistUrl = "http://nist.time.gov/timezone.cgi?UTC/s/0";//构造并实例化一个WebRequest
System.Net.WebRequest myHttpWebRequest = System.Net.HttpWebRequest.Create( strNistUrl );
//设置连接超时时间
myHttpWebRequest.Timeout = 8000;
//设置WebResponse,接收返回信息
System.Net.WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse();
//获取返回信息流信息
Stream sr = myHttpWebResponse.GetResponseStream();
//设置流阅读器
StreamReader reader = new StreamReader(sr, System.Text.Encoding.ASCII);
//流输出为字符串
String srdata = reader.ReadToEnd();
//将返回html文本中的双引号变为单引号
srdata = srdata.Replace( "\"","\'");//用模式匹配加分割的方式定位和获取时间信息
string strOut = Regex.Split( srdata, "color='white'><b>" , RegexOptions.IgnoreCase)[1];
string strTime = Regex.Split( strOut , "<br/>", RegexOptions.IgnoreCase )[0];
//小时需调整,因时区相差8小时
time = DateTime.Parse( strTime ).AddHours( 8 ).ToLongTimeString();//用模式匹配加分割的方式定位和获取日期信息
string strOut1 = Regex.Split( srdata, "'5' color='white'>" , RegexOptions.IgnoreCase)[1];
string strData = Regex.Split( strOut1 , "<br/>", RegexOptions.IgnoreCase )[0];
//获取中国时间-小时部分
int intHourCn = int.Parse( time.Split( ':' )[0] );
//获取美国时间-小时部分
int intHourUS = int.Parse( DateTime.Parse( strTime ).ToLongTimeString().Split( ':' )[0] );
//比较小时差异,调整日期差异
if ( intHourCn < intHourUS )
{
Data = DateTime.Parse( strData ).AddDays(1).ToShortDateString();
}
else
{
Data = DateTime.Parse( strData ).ToShortDateString();
}
}
catch( System.Exception ex )
{
time = string.Empty;
Data = string.Empty;
MessageBox.Show( "获取时间出错:" + ex.Message );
}
}
我25上班,方便的话,Q上聊。
99363590我有十成的把握解决这个问题。
不过,我也担心是否会是侵权……
因为你的情况好奇怪,这么难的东西,别的部门怎么可能不协作的。