平时也经常采集网站数据,也做模拟登录,但一般都是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. 剑指Offer:第一个只出现一次的字符

    题目:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",这输出'b' // 第一个只出现一次的字符 #include <stdio.h> char f ...

  2. Parallel for loops in .NET C# z

    The start index: this is inclusive, i.e. this will be the first index value in the loop The end inde ...

  3. 2014 多校联合训练赛6 Fighting the Landlords

    本场比赛的三个水题之一,题意是两个玩家每人都持有一手牌,问第一个玩家是否有一种出牌方法使得在第一回和对方无牌可出.直接模拟即可,注意一次出完的情况,一开始没主意,wa了一发. #include< ...

  4. DNS (二)协议

    报文字段含义: 标识字段 由客户程序设置并由服务器返回结果.客户程序通过它来确定响应与查询是否匹配. 标志字段 协商具体的通信方式和反馈通信状态随后的 4个16 bit字段说明最后 4个变长字段中包含 ...

  5. uvalive 4670 Dominating Patterns

    在文本串中找出现次数最多的子串. 思路:AC自动机模板+修改一下print函数. #include<stdio.h> #include<math.h> #include< ...

  6. Apache启动是出现the requested operation has failed

    出现的原因: 原因一:80端口占用例如IIS,另外就是迅雷. 原因二:软件冲突装了某些软件会使apache无法启动如Dr.com 你打开网络连接->TcpIp属性->高级->WINS ...

  7. PHP编码规范整理,很全很实用(图文版)

    有一个组织叫做“php互操作性框架制定小组”,这个小组的主要目的是制定各种PHP编码规范的,下面就是我根据小组提供的建议整理的一些常用的编码规范. PSR-1: 1.PHP代码文件必须以<?ph ...

  8. kvm usb

  9. AndroidManifest笔记

    1.android:configChanges如果配置了这个值,比如"orientation",在屏幕旋转时会调用Activity的onConfigurationChanged,而 ...

  10. pcb原理图注意问题大汇总

    1. 元器件之间连线用Wire(■)命令而不是用Line( /)命令,虽然从表面上看,两者都是直线,只是颜色稍有些不同,但用Wire(■)命令放置的导线是具有电气特性的,而用Line(/)命令放置的直 ...