平时也经常采集网站数据,也做模拟登录,但一般都是html控件POST到页面登录;还没有遇到用户服务器控件button按钮点击事件登录的,今天像往常一样POST传递参数,但怎么都能登录不了;最后发现还有两个参数需要传,__EVENTVALIDATION__VIEWSTATE

  在传的过程中需要对参数值进行URL编码

  System.Web.HttpUtility.UrlEncode(value)

  模拟登录代码:在本地写的一个测试的网站来模拟登录,原理都一样:

        Request request = new Request();
request.Method = Method.POST;
request.Add("UserName", "");
request.Add("PassWord", "");
request.Add("btnLogin", "Button");
HtmlHelper html = new HtmlHelper();
Response response = html.GetHTML("http://localhost:64554/Lgoin.aspx");
Match math = Regex.Match(response.Html, "<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"(?<val>.*?)\" />", RegexOptions.Singleline | RegexOptions.IgnoreCase);
string value = math.Groups["val"].Value;
request.Add("__VIEWSTATE", System.Web.HttpUtility.UrlEncode(value));
math = Regex.Match(response.Html, "<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"(?<val>.*?)\" />", RegexOptions.Singleline | RegexOptions.IgnoreCase);
request.Add("__EVENTVALIDATION", System.Web.HttpUtility.UrlEncode(math.Groups["val"].Value));
response = html.GetHTML("http://localhost:64554/Lgoin.aspx", true, request);

  这里发布哈,我平时用的HttpHelper类

 #region 发送方式
public enum Method
{
GET, POST
}
#endregion #region 返回内容
/// <summary>
/// 返回内容
/// </summary>
public class Response
{
#region 远程服务器时间
DateTime _RemoteDateTime = Convert.ToDateTime("1900-01-01 00:00:00.000");
/// <summary>
/// 远程服务器时间
/// </summary>
public DateTime RemoteDateTime
{
get { return _RemoteDateTime; }
set { _RemoteDateTime = value; }
}
#endregion #region 返回内容
string html = string.Empty;
/// <summary>
/// 返回内容
/// </summary>
public string Html
{
get { return html; }
set { html = value; }
}
#endregion #region 返回的Cookies
CookieContainer _Cookies = new CookieContainer();
/// <summary>
/// 返回的Cookies
/// </summary>
public CookieContainer Cookies
{
get { return _Cookies; }
set { _Cookies = value; }
}
#endregion #region HTTP状态代码
/// <summary>
/// HTTP状态代码
/// </summary>
public HttpStatusCode StatusCode { get; set; }
#endregion #region 返回的图片内容
Image _Image = null;
/// <summary>
/// 返回的图片内容
/// </summary>
public Image Image
{
get { return _Image; }
set { _Image = value; }
}
#endregion #region 当前URL
string _Url = string.Empty;
/// <summary>
/// 当前URL
/// </summary>
public string Url
{
get { return _Url; }
set { _Url = value; }
}
#endregion
}
#endregion #region 发送数据
/// <summary>
/// 发送数据
/// </summary>
[Serializable]
public class Request
{
List<KeyValuePair<string, string>> sList = new List<KeyValuePair<string, string>>();
Method _sendMethod = Method.GET;
public Method Method
{
get { return _sendMethod; }
set { _sendMethod = value; }
} private CookieContainer _Cookies = new CookieContainer();
public CookieContainer Cookies
{
get { return this._Cookies; }
set { this._Cookies = value; }
}
public void Clear()
{
this.sList.Clear();
}
public void Add(string key, string value)
{
this.sList.Add(new KeyValuePair<string, string>(key, value));
}
public void Update(string key, string value)
{
int index = -;
for (int i = ; i < this.List.Count; i++)
{
if (this.List[i].Key.Equals(key))
{
index = i;
break;
}
} if (index > ) this.List.RemoveAt(index); this.List.Add(new KeyValuePair<string, string>(key, value));
}
public override string ToString()
{
string sRet = string.Empty; foreach (KeyValuePair<string,string> val in this.sList)
{
if (sRet.Length == )
sRet = string.Format("{0}={1}", val.Key, val.Value);
else
sRet = string.Format("{0}&{1}={2}", sRet, val.Key, val.Value);
} return sRet;
} public byte[] ToBytes()
{
return Encoding.ASCII.GetBytes(this.ToString());
} public List<KeyValuePair<string,string>> List
{
set
{
this.sList = value;
}
get
{
return this.sList;
}
} public string Find(string key)
{
string sRet = string.Empty; KeyValuePair<string, string> val = this.List.Find(delegate(KeyValuePair<string, string> k) { return k.Key.Equals(key); }); sRet = val.Value; return sRet;
} }
#endregion public class HtmlHelper
{
public static HtmlHelper Init()
{
return new HtmlHelper();
} #region Cookies
CookieContainer _Cookies = new CookieContainer();
/// <summary>
/// Cookies
/// </summary>
public CookieContainer Cookies
{
get { return _Cookies; }
set { _Cookies = value; }
}
#endregion #region 连接远程服务器超时触发事件
public delegate void Connection_TimeOut_Handle(string sUrl, Request request, Exception ex);
/// <summary>
/// 连接远程服务器超时触发事件
/// </summary>
public event Connection_TimeOut_Handle Connection_TimeOut;
#endregion #region 获取数据完毕触发事件
public delegate void Connection_Complete_Handle(Response response);
/// <summary>
/// 获取数据完毕触发事件
/// </summary>
public event Connection_Complete_Handle Connection_Complete;
#endregion #region 设置发送头信息
/// <summary>
/// 设置发送头信息
/// </summary>
/// <param name="request"></param>
private void SetRequestHeader(ref HttpWebRequest request, string referer)
{
request.Timeout = ;
request.Accept = "*/*";
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.0.50727;)";
request.Headers["Accept-Encoding"] = "gzip, deflate";
request.Headers["Accept-Language"] = "zh-cn";
request.Headers["Accept-Charset"] = "utf-8;q=0.7,*;q=0.7";
request.ContentType = "application/x-www-form-urlencoded";
request.Referer = referer;
request.KeepAlive = true;
}
#endregion #region 解压经过Gzip压缩的流
/// <summary>
/// 解压经过Gzip压缩的流
/// </summary>
/// <param name="contentEncoding">流编码</param>
/// <param name="resonseStream">网页返回的流内容</param>
/// <returns></returns>
private string GzipStreame(string ecoding, Stream resonseStream)
{
return GzipStreame(ecoding, resonseStream, Encoding.UTF8);
}
private string GzipStreame(string ecoding, Stream resonseStream, Encoding coding)
{
string html = string.Empty;
if (ecoding.ToLower().IndexOf("gzip") != -)
{
html = new StreamReader(new GZipStream(resonseStream, CompressionMode.Decompress), coding).ReadToEnd();
}
else if (ecoding.ToLower().IndexOf("deflate") >= )
{
html = new StreamReader(new DeflateStream(resonseStream, CompressionMode.Decompress), coding).ReadToEnd();
}
else
{
html = new StreamReader(resonseStream, coding).ReadToEnd();
}
return html;
} #endregion #region 获取远程HTML
/// <summary>
/// 获取远程HTML
/// </summary>
/// <param name="url">地址</param>
/// <returns></returns>
public Response GetHTML(string url)
{
return GetHTML(url, false, new Request(), new Uri(url).Host, Encoding.UTF8, null);
}
public Response GetHTML(string url, WebProxy proxy)
{
return GetHTML(url, false, new Request(), new Uri(url).Host, Encoding.UTF8, proxy);
}
public Response GetHTML(string url, Encoding coding)
{
return GetHTML(url, false, new Request(), new Uri(url).Host, coding, null);
}
public Response GetHTML(string url, Encoding coding, WebProxy proxy)
{
return GetHTML(url, false, new Request(), new Uri(url).Host, coding, proxy);
}
/// <summary>
/// 获取远程HTML
/// </summary>
/// <param name="url">地址</param>
/// <param name="send">是否自动重定向URL</param>
/// <returns></returns>
public Response GetHTML(string url, bool bAllowAutoRedirect)
{
return GetHTML(url, bAllowAutoRedirect, new Request() { }, new Uri(url).Host, Encoding.UTF8, null);
}
public Response GetHTML(string url, bool bAllowAutoRedirect, WebProxy porxy)
{
return GetHTML(url, bAllowAutoRedirect, new Request() { }, new Uri(url).Host, Encoding.UTF8, porxy);
}
/// <summary>
/// 获取远程HTML
/// </summary>
/// <param name="sUrl">地址</param>
/// <param name="send">发送内容</param>
/// <returns></returns>
public Response GetHTML(string url, Request request)
{
return GetHTML(url, request, Encoding.UTF8);
}
public Response GetHTML(string url, Request request, WebProxy porxy)
{
return GetHTML(url, false, request, new Uri(url).Host, Encoding.UTF8, porxy);
}
public Response GetHTML(string url, bool bAllowAutoRedirect, Request request)
{
return GetHTML(url, bAllowAutoRedirect, request, new Uri(url).Host, Encoding.UTF8, null);
}
public Response GetHTML(string url, bool bAllowAutoRedirect, Request request, WebProxy proxy)
{
return GetHTML(url, bAllowAutoRedirect, request, new Uri(url).Host, Encoding.UTF8, proxy);
}
public Response GetHTML(string url, Request request, Encoding coding)
{
return GetHTML(url, false, request, new Uri(url).Host, coding, null);
}
public Response GetHTML(string url, Request request, Encoding coding, WebProxy proxy)
{
return GetHTML(url, false, request, new Uri(url).Host, coding, proxy);
}
/// <summary>
/// 获取远程HTML
/// </summary>
/// <param name="sUrl">地址</param>
/// <param name="bAllowAutoRedirect">是否自动跳转</param>
/// <param name="send">发送内容</param>
/// <returns></returns>
public Response GetHTML(string sUrl, bool bAllowAutoRedirect, Request request, string referer)
{
return GetHTML(sUrl, bAllowAutoRedirect, request, referer, Encoding.UTF8, null);
}
public Response GetHTML(string sUrl, bool bAllowAutoRedirect, Request request, string referer, WebProxy proxy)
{
return GetHTML(sUrl, bAllowAutoRedirect, request, referer, Encoding.UTF8, proxy);
}
/// <summary>
/// 获取HTML页面内容
/// </summary>
/// <param name="url">地址</param>
/// <param name="bAllowAutoRedirect">是否自动跳转</param>
/// <param name="request">查询信息</param>
/// <param name="referer">引用页</param>
/// <param name="coding">编码格式</param>
/// <returns></returns>
public Response GetHTML(string url, bool bAllowAutoRedirect, Request request, string referer, Encoding coding, WebProxy proxy)
{
Response result = new Response(); if (request.Method == Method.GET)
{
string sData = request.ToString();
if (sData.Length > ) url = string.Format("{0}?{1}", url, sData);
} HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url);
if (proxy != null) httpRequest.Proxy = proxy; #region SSL方式
if (url.Contains("https://"))
{
//这一句一定要写在创建连接的前面。使用回调的方法进行证书验证。
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
//创建证书文件
X509Certificate objx509 = new X509Certificate(); //添加到请求里
httpRequest.ClientCertificates.Add(objx509);
}
#endregion // 设置发送头信息
if (referer.Length == )
SetRequestHeader(ref httpRequest, new Uri(url).Host);
else
SetRequestHeader(ref httpRequest, referer);
// 自动重定向
httpRequest.AllowAutoRedirect = bAllowAutoRedirect;
httpRequest.Timeout = * ;
// 关联Cookies
//if (httpRequest.CookieContainer == null)
// httpRequest.CookieContainer = new CookieContainer();
httpRequest.CookieContainer = this.Cookies; try
{ if (request.Method == Method.POST)
{
// 设置发送方式
httpRequest.Method = request.Method.ToString();
// 获取发送数据流
//HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse; Stream strem = httpRequest.GetRequestStream(); // 写入发送数据
byte[] bs = request.ToBytes();
strem.Write(bs, , bs.Length);
strem.Close();
} HttpWebResponse httpResponse = httpRequest.GetResponse() as HttpWebResponse; Stream responseStream = httpResponse.GetResponseStream(); StreamReader sr = new StreamReader(responseStream, coding); //result.Html = sr.ReadToEnd();
result.Html = System.Web.HttpUtility.HtmlDecode(GzipStreame(httpResponse.ContentEncoding, responseStream, coding));
result.RemoteDateTime = Convert.ToDateTime(httpResponse.GetResponseHeader("Date")); result.Url = httpResponse.ResponseUri.OriginalString; this.Cookies.Add(httpResponse.Cookies); result.Cookies = this.Cookies; result.StatusCode = httpResponse.StatusCode; responseStream.Dispose(); if (this.Connection_Complete != null)
this.Connection_Complete.Invoke(result);
}
catch (Exception ex)
{
if (this.Connection_TimeOut != null)
this.Connection_TimeOut.Invoke(url, request, ex);
}
return result;
} private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
} #endregion #region 获取远程图片
public Response GetImage(string sUrl)
{
return GetImage(sUrl, false, new Request());
}
public Response GetImage(string sUrl, WebProxy proxy)
{
return GetImage(sUrl, false, new Request(), proxy);
}
public Response GetImage(string sUrl, string referer)
{
return GetImage(sUrl, false, referer, null);
}
public Response GetImage(string sUrl, string referer, WebProxy proxy)
{
return GetImage(sUrl, false, referer, proxy);
}
public Response GetImage(string sUrl, bool bAllowAutoRedirect, string referer)
{
return GetImage(sUrl, bAllowAutoRedirect, new Request(), referer, null);
}
public Response GetImage(string sUrl, bool bAllowAutoRedirect, string referer, WebProxy proxy)
{
return GetImage(sUrl, bAllowAutoRedirect, new Request(), referer, null);
}
//public Image GetImage(string sUrl, bool bAllowAutoRedirect, Request request)
//{
// return GetImage(sUrl, bAllowAutoRedirect, request, new CookieContainer(), "");
////}
//public Image GetImage(string sUrl, bool bAllowAutoRedirect, Request request, string referer)
//{
// return GetImage(sUrl, bAllowAutoRedirect, request,referer);
//}
/// <summary>
/// 获取远程图片
/// </summary>
/// <param name="sUrl">图片地址</param>
/// <param name="bAllowAutoRedirect">是否自动跳转</param>
/// <param name="send">发送内容</param>
/// <returns></returns>
public Response GetImage(string sUrl, bool bAllowAutoRedirect, Request request)
{
return GetImage(sUrl, bAllowAutoRedirect, request, "", null);
}
public Response GetImage(string sUrl, bool bAllowAutoRedirect, Request request, string referer)
{
return GetImage(sUrl, bAllowAutoRedirect, request, referer, null);
}
public Response GetImage(string sUrl, bool bAllowAutoRedirect, Request request, WebProxy proxy)
{
return GetImage(sUrl, bAllowAutoRedirect, request, "", proxy);
}
/// <summary>
/// 获取远程图片
/// </summary>
/// <param name="sUrl">图片地址</param>
/// <param name="bAllowAutoRedirect">是否自动跳转</param>
/// <param name="send">发送内容</param>
/// <returns></returns>
public Response GetImage(string url, bool bAllowAutoRedirect, Request request, string referer, WebProxy proxy)
{
Response response = new Response(); if (request.Method == Method.GET)
{
string sData = request.ToString();
if (sData.Length > ) url = string.Format("{0}?{1}", url, sData);
} HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url);
if (proxy != null) httpRequest.Proxy = proxy; #region SSL方式
if (url.Contains("https://"))
{
//这一句一定要写在创建连接的前面。使用回调的方法进行证书验证。
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
//创建证书文件
X509Certificate objx509 = new X509Certificate(); //添加到请求里
httpRequest.ClientCertificates.Add(objx509);
}
#endregion // 设置发送头信息
if (referer.Length == )
SetRequestHeader(ref httpRequest, new Uri(url).Host);
else
SetRequestHeader(ref httpRequest, referer); // 自动重定向
httpRequest.AllowAutoRedirect = bAllowAutoRedirect;
// 关联Cookies
httpRequest.CookieContainer = this.Cookies; try
{ if (request.Method == Method.POST)
{
// 设置发送方式
httpRequest.Method = request.Method.ToString();
// 获取发送数据流
//HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse; Stream strem = httpRequest.GetRequestStream(); // 写入发送数据
byte[] bs = request.ToBytes();
strem.Write(bs, , bs.Length);
strem.Close();
} HttpWebResponse httpResponse = httpRequest.GetResponse() as HttpWebResponse; Stream responseStream = httpResponse.GetResponseStream(); //if (responseStream.CanSeek)
//{
response.Image = Image.FromStream(responseStream);
//}
//else
//{
// response.Image = null;
//}
response.RemoteDateTime = Convert.ToDateTime(httpResponse.GetResponseHeader("Date")); this.Cookies.Add(httpResponse.Cookies);
response.Cookies = this.Cookies;
response.StatusCode = httpResponse.StatusCode;
responseStream.Dispose();
responseStream.Close();
}
catch (Exception ex)
{
if (this.Connection_TimeOut != null)
this.Connection_TimeOut.Invoke(url, request, ex);
} return response;
}
#endregion #region 异步获取远程HTML
/// <summary>
/// 异步获取远程HTML
/// </summary>
/// <param name="sUrl">地址</param>
/// <returns></returns>
public void BeginGetHTML(string sUrl)
{
BeginGetHTML(sUrl, false, new Request() { });
}
/// <summary>
/// 异步获取远程HTML
/// </summary>
/// <param name="sUrl">地址</param>
/// <param name="send">是否自动重定向URL</param>
/// <returns></returns>
public void BeginGetHTML(string sUrl, bool bAllowAutoRedirect)
{
BeginGetHTML(sUrl, bAllowAutoRedirect, new Request() { });
}
/// <summary>
/// 异步获取远程HTML
/// </summary>
/// <param name="sUrl">地址</param>
/// <param name="send">发送内容</param>
/// <returns></returns>
public void BeginGetHTML(string sUrl, Request request)
{
BeginGetHTML(sUrl, false, request);
}
/// <summary>
/// 异步获取远程HTML
/// </summary>
/// <param name="sUrl">地址</param>
/// <param name="bAllowAutoRedirect">是否自动跳转</param>
/// <param name="send">发送内容</param>
/// <returns></returns>
public void BeginGetHTML(string sUrl, bool bAllowAutoRedirect, Request request)
{
Response result = new Response(); if (request.Method == Method.GET)
{
string sData = request.ToString();
if (sData.Length > ) sUrl = string.Format("{0}?{1}", sUrl, sData);
} HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(sUrl);
// 设置发送头信息
SetRequestHeader(ref httpRequest, new Uri(sUrl).Host);
// 自动重定向
httpRequest.AllowAutoRedirect = bAllowAutoRedirect; if (request.Method == Method.POST)
{
// 设置发送方式
httpRequest.Method = request.Method.ToString(); // 获取发送数据流
Stream stream = httpRequest.GetRequestStream(); byte[] bs = request.ToBytes();
stream.Write(bs, , bs.Length);
stream.Close();
//httpRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback),httpRequest);
// 写入发送数据 } //HttpWebResponse httpResponse = httpRequest.GetResponse() as HttpWebResponse; AsyncCallback callback = new AsyncCallback(GetResponseStreamCallback);
try
{
httpRequest.BeginGetResponse(callback, httpRequest);
}
catch (WebException ex)
{
if (this.Connection_TimeOut != null)
this.Connection_TimeOut.Invoke(sUrl, request, ex);
}
} private void GetRequestStreamCallback(IAsyncResult ar)
{
//Request request = ar.AsyncState as Request;
//Stream stream = async.EndGetRequestStream(ar); //byte[] bs = request.ToBytes();
//stream.Write(bs, 0, bs.Length);
//stream.Close();
} private void GetResponseStreamCallback(IAsyncResult ar)
{
HttpWebRequest httpRequest = ar.AsyncState as HttpWebRequest;
HttpWebResponse httpResponse = httpRequest.EndGetResponse(ar) as HttpWebResponse; Stream responseStream = httpResponse.GetResponseStream(); Response response = new Response(); response.Html = GzipStreame(httpResponse.ContentEncoding, responseStream);
response.RemoteDateTime = Convert.ToDateTime(httpResponse.GetResponseHeader("Date"));
//response.Cookies = httpResponse.Cookies; if (this.Connection_Complete != null)
this.Connection_Complete.Invoke(response);
}
#endregion
}

HttpWebRequest 模拟登录响应点击事件(分享自己用的HttpHelper类)的更多相关文章

  1. UIButton无法响应点击事件

    一.问题描述 因为项目需要,需要UITableView上添加固定的筛选表头,一直固定,不能随UITableView滚动.所以直接将表头与UITableView分离,将它添加到控制器的UIView上,即 ...

  2. 设置TextView下划线并响应点击事件(SpannableString)

    下面是一个20行的完整Demo代码:基本原理是使用一个SpannableString并设置其ClickableSpan来响应点击事件. TextView useInfo = (TextView) fi ...

  3. 隐藏自定义的tabbar之后,push到B视图,B视图的键盘工具条无法响应点击事件

    我的情况如下: 在TabbarViewController中隐藏了系统的tabbar,然后自定义tabbar,A B C D 4个视图都有UINavigationController,A视图 使用的是 ...

  4. iOS开发-UIImageView响应点击事件

    UIImageView是不能够响应点击事件的,在开发过程中我们需要经常对头像等添加点击事件,上网搜索一番后发现有如下两个方法: 1.找到点击图片Event,添加事件处理函数 UIImageView.u ...

  5. c# 给button添加不规则的图片以及用pictureBox替代button响应点击事件

    1.Flat button 用这个方法,前提是要把button的type设置为Flat button1.TabStop = false;button1.FlatAppearance.BorderSiz ...

  6. TextView下划线,部分文字并响应点击事件(SpannableString)

    TextView useInfo = (TextView) findViewById(R.id.info); useInfo.setText("开始即表示您同意遵守"); Stri ...

  7. Swift-ImageView响应点击事件

    随着Swift语言的不断更新迭代,纯Swift语言编写的代码更加紧凑简单,结合StoryBorad的使用,使开发苹果APP的门槛降低了不少.个人也是比较推荐使用Interface Builder去生成 ...

  8. Android EditText中插入图片并响应点击事件

    EditText中插入图片基本就是两种方法: ,通过Html.fromHtml(..)来实现 [mw_shl_code=java,true]eText.append(Html.fromHtml(&qu ...

  9. 【转】Android - Button(按钮)的响应点击事件的4种写法

    原文网址:http://www.yrom.net/blog/2011/12/12/android-4-onclicklistener-of-button/ Button控件setOnclickList ...

随机推荐

  1. 使用powerdesigner 画图的详细说明

    一.概念数据模型概述 数据模型是现实世界中数据特征的抽象.数据模型应该满足三个方面的要求: 1)能够比较真实地模拟现实世界 2)容易为人所理解 3)便于计算机实现 概念数据模型也称信息模型,它以实体- ...

  2. mysql日期加减问题

    有一个date列,我想修改下,让该列里每个日期都加上7天,怎么写代码?  update [表名] set date=date_add(date, interval 7 day); SELECT * f ...

  3. 4.3 Reduction代码(Heterogeneous Parallel Programming class lab)

    首先添加上Heterogeneous Parallel Programming class 中 lab: Reduction的代码: myReduction.c // MP Reduction // ...

  4. 【Zookeeper学习】Apache Zookeeper项目简介

    正在撰写,稍后来访……

  5. Visual Studio配置OpenCV设置全局的继承属性

    1.安装完毕OpenCV后,新建一个CLR空项目,将其取名为"SetingGlobalOpenCVDir"便于以后变更版本时修改.如下图所示: 2.点击"视图->其 ...

  6. leetcode@ [241] Different Ways to Add Parentheses (Divide and Conquer)

    https://leetcode.com/problems/different-ways-to-add-parentheses/ Given a string of numbers and opera ...

  7. Altium Designer导出部分元件过滤不焊接的元件【worldsing笔记】

    在Altium Designer画图过程中难免会多出单元电路,或是测试电路,特别是第一版时,有部分元件不用焊接   这时给采购.或是生产时有必要注明哪些元件不焊接,哪些元件不采购.有两种方法可以过滤: ...

  8. 我被eclipse的tomcat坑的经历

    奇怪的乱码问题: 1.jsp页面utf-8 2.java代码utf-8 3.数据库编码utf-8 4.tomcat server.xml配置URIEncoding="UTF-8" ...

  9. C#基础系列(一)

    1.vs中F5(调试)和Ctrl + F5(直接运行不调试)的区别: Ctrl+F5是直接运行生成的程序,不进行重新编绎,所以运行起来比较快F5是重新编绎后再运行,这样可以在程序代码中设置断点跟踪来调 ...

  10. mybatis的辅助类

    package org.ssi.util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; impor ...