需求:客户的数据同时存在在另外一个不可控的系统中,需要和当前系统同步。

思路:自动登录另外一个系统,然后抓取数据,同步到本系统中。

技术点:模拟用户登录;保存登录状态;抓取数据

/// <summary>
/// visit the target url
/// </summary>
/// <param name="targetURL"></param>
/// <param name="cc">this is for keeping cookies and sessions</param>
/// <param name="param">this is the data need post inside form</param>
/// <returns>html page</returns>
public static string PostAndGetHTML(string targetURL,CookieContainer cc,Hashtable param)
{
//prepare the submit data
string formData = "";
foreach (DictionaryEntry de in param)
{
formData += de.Key.ToString() + "=" + de.Value.ToString() + "&";
}
if (formData.Length > )
formData = formData.Substring(, formData.Length - ); //remove last '&' ASCIIEncoding encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(formData); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetURL);
request.Method = "POST"; //post
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.1124)"; Stream newStream = request.GetRequestStream();
newStream.Write(data, , data.Length); newStream.Close(); request.CookieContainer = cc;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
cc.Add(response.Cookies);
Stream stream = response.GetResponseStream();
string result = new StreamReader(stream, System.Text.Encoding.Default).ReadToEnd();
return result;
} public static DataTable ConvertToDT(DataTable dt, string tableHTML)
{ int lastTD = tableHTML.ToLower().LastIndexOf("</td>");
int firstRow = tableHTML.ToLower().IndexOf("<tr") + ;//after ""<tr
int index = tableHTML.ToLower().IndexOf("<tr", firstRow) + ;//after ""<tr
while (index < lastTD)
{
DataRow dr = dt.NewRow();
for (int i = ; i < dt.Columns.Count; i++)
{
string value = "";
int startTD = tableHTML.ToLower().IndexOf("<td", index) + ;//after "<td"
int endTD = tableHTML.ToLower().IndexOf("</td>", startTD);
if (endTD < )
break;
string tdStr = tableHTML.Substring(startTD, endTD - startTD); //remove <> and others
tdStr = tdStr.Replace("&nbsp;", "").Replace("\t", "").Replace("\r", "");
string[] v = tdStr.Split('<', '>');
for (int j = ; j < v.Length; j++)
{
j++;
if (v[j].Trim() != "")
{
value = v[j].Trim();
break;
}
}
//
dr[i] = value;
index = endTD;
}
dt.Rows.Add(dr); }
return dt;
}

这一个是调用的例子:先登录,在查询。 实际中这个逻辑可能有很多步骤

CookieContainer cc = new CookieContainer();//this is for keep the Session and Cookie
Hashtable param = new Hashtable();//this is for keep post data. string urlLogin = "http://demo.server//login.asp";
//do find the elementId that needed. check the source of login page can get this information
param.Add("User", "xxx");
param.Add("Password", "xxxx");
string result =GrabHelper.PostAndGetHTML(urlLogin, cc, param);
//check result, whether login success //if login success, goto the target url, and input some value.
string url2 = " http://demo.server/query.asp?id=1";// need change. special logic
param.Clear();
//param.Add("SearchAreaId","JobId")
result = GrabHelper.PostAndGetHTML(url2, cc, new Hashtable());
//ConvertToDT the html or do something others

C# 自动登录网页,浏览页面【转载】的更多相关文章

  1. python 自动登录网页

    语言:python 浏览器:chrome 工具:chrome控制台 #!/usr/bin/python # coding: GBK import urllib,urllib2,httplib,cook ...

  2. 获取全局上下文(getApplicationContext)_创建Shared Preference工具类_实现自动登录

    获取全局上下文(getApplicationContext)_创建Shared Preference工具类_实现自动登录 ===========================获取全局上下文(getA ...

  3. C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录

    最近学习C#网络编程中,想实现网页自动登录并提交GET/POST信息,再实现循环登录不断发送报文给服务器,服务器发送消息给客户端记录能登录的账户和密码,做到后面实现绕过验证码.动态抓取登录位置等,但由 ...

  4. 类似818tu.co微信小说分销系统设计之多公众号网页授权自动登录源码

    /** 转载请保留原地址以及版权声明,请勿恶意修改 *  作者:杨浩瑞  QQ:1420213383  独立博客:http://www.yxxrui.cn * [后台]http://xiaoshuo. ...

  5. 类似818tu.c微信小说分销系统设计之多公众号网页授权自动登录源码分享

    /** 转载请保留原地址以及版权声明,请勿恶意修改 *  作者:杨浩瑞  QQ:1420213383  独立博客:http://www.yxxrui.cn * [后台]http://xiaoshuo. ...

  6. 利用activeX控件在网页里自动登录WIN2003远程桌面并实时控制

    首先要自己配置并打开受控端的WEB远程桌面服务,这个在“添加/删除windows组件”里有,我只在windows 2003 server里试过,没试过XP.下面我们在客户端安装微软提供的远程桌面客户端 ...

  7. C#网页自动登录和提交POST信息的多种方法(转)

    网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser.WebClient.HttpWebRequest这三 ...

  8. Laravel 登录后跳转回登录前浏览的页面

    一.经过 Auth 中间件检查后跳转至登录页面 也就是没有通过 auth 中间件的认证检查,被 auth 中间件拦截后跳转至登录页面.这种情况下,Laravel 默认会在用户登录成功后自动跳转回登录前 ...

  9. 苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转

    昨天下午,测试提了一个bug,问题是:在苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转. 思前想后找了半天没思路,后来经过同事的点拨,说可能是禁用了cookie之类的,反正我也没思路就顺 ...

随机推荐

  1. javascrip 分享到

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. time返回当前的 Unix 时间戳而$_SERVER["REQUEST_TIME"]得到请求开始时的时间戳

    time():返回当前的 Unix 时间戳 $_SERVER["REQUEST_TIME"]:得到请求开始时的时间戳,可以用来判断完成整个php处理的时间

  3. RPMForge——Quick Start build system

    How to setup multimedia on CentOS-5 CentOS ships with basic sound support for audio content encoded ...

  4. 实现Word的列表样式

    1.创建列表,但是不要求在文档视图中显示的层级列表 1)首先是要先把层级建立好,然后选中要编号文字.开始->段落->多级列表,选择一个列表样式,会默认所有的编号文字都是一级: 2)选择&q ...

  5. Docker Machine

    Docker Machine http://dockone.io/article/1485?utm_source=tuicool&utm_medium=referral 本地安装与使用 Doc ...

  6. codevs 1557 热浪

    传送门 题目描述 Description 德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品.Farmer John此时以先天 ...

  7. Lodash,你正在使用的JavaScript库

    JavaScript工具库lodash发布了3.5版,成为了npm包仓库中依赖最多的库.它正在摆脱屌丝身份,成为开发者的不二之选. lodash一开始是Underscore.js库的一个fork,因为 ...

  8. Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能

    Autofac 结合 Castle DynamicProxy2 功能        Autofac 不仅作为轻量级高效的 IoC 容器,而且还能很好的与 Castle.DynamicProxy2 结合 ...

  9. 【PPC】Qemu怎么玩儿

    1. 编译Qemu这里不建议使用自动安装,手工编译下.Qemu源代码的质量很高,什么环境都能编译过.tar -xzvf qemu.tar.gzmkdir build-qemucd build-qemu ...

  10. 我要爱死这个markdown 了

    今天上班依旧看wpdang的文章,最后作者说,文章使用markdown写的,好奇心促使我搜了一把什么是markdown.然后看到了这篇文章,一瞬间就开始兴奋了.顿时觉得,这个东西太好用 了,简直又激起 ...