园林空气净化器永久测试版
生活随笔
收集整理的這篇文章主要介紹了
园林空气净化器永久测试版
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
首先這是一個(gè)用Jumony技術(shù)驅(qū)動(dòng)的好玩的東西,需要先下載Jumony M1然后添加引用。
其次只提供源代碼,不負(fù)責(zé)任何技術(shù)支持,遇到任何問(wèn)題請(qǐng)自己去修改。
?
這款凈化器的主要功能就是降糖降脂,促進(jìn)新陳代謝,有益身心健康,但有造成頁(yè)面崩潰等嚴(yán)重副作用,大家慎重選擇。
?
如何使用?
首先編譯成一個(gè)控制臺(tái)程序,運(yùn)行。然后修改host文件,加入127.0.0.1 www.cnblogs.com。最后關(guān)掉瀏覽器,重新打開(kāi)www.cnblogs.com就可以了。
?
該程序在有UAC控制的系統(tǒng)中,需要以管理員身份運(yùn)行。
?
源代碼如下:
?
using?System;using?System.IO;
using?System.Linq;
using?System.Net;
using?System.Runtime.Serialization;
using?System.Runtime.Serialization.Json;
using?System.Text;
using?System.Text.RegularExpressions;
using?Ivony.Fluent;
using?Ivony.Web.Html;
using?Ivony.Web.Html.HtmlAgilityPackAdaptor;
using?HtmlAgilityPack;
using?System.Threading;
namespace?CnblogsCleaner
{
??class?Program
??{
????static?void?Main(?string[]?args?)
????{
??????var?listener?=?new?HttpListener();
??????listener.Prefixes.Add(?"http://*/"?);
??????listener.Start();
??????while?(?true?)
??????{
????????var?context?=?listener.GetContext();
????????//ProcessContext(?context?);
????????((Action)?delegate?{?ProcessContext(?context?);?}).BeginInvoke(?null,?null?);
??????}
????}
????private?static?void?ProcessContext(?HttpListenerContext?context?)
????{
??????try
??????{
????????if?(?!context.Request.Url.Host.EndsWith(?"cnblogs.com"?)?)
??????????return;
????????var?builder?=?new?UriBuilder(?context.Request.Url?);
????????builder.Host?=?"222.92.117.56";
????????Console.WriteLine(?context.Request.Url?);
????????var?match?=?userBlogUrlRegex.Match(?context.Request.Url.AbsoluteUri?);
????????if?(?blockedUsers.Contains(?match.Groups["username"].Value?)?)
????????{
??????????context.Response.StatusCode?=?200;
??????????context.Response.ContentEncoding?=?Encoding.UTF8;
??????????using?(?var?writer?=?new?StreamWriter(?context.Response.OutputStream,?Encoding.UTF8?)?)
??????????{
????????????writer.WriteLine(?"此頁(yè)面有害身心健康,已被園林空氣凈化器凈化,如需查看,請(qǐng)關(guān)閉凈化器。"?);
??????????}
????????}
????????var?request?=?(HttpWebRequest)?HttpWebRequest.Create(?builder.Uri?);
????????request.Method?=?context.Request.HttpMethod;
????????request.ProtocolVersion?=?context.Request.ProtocolVersion;
????????request.AllowAutoRedirect?=?false;
????????request.Timeout?=?(int)?new?TimeSpan(?0,?0,?10?).TotalMilliseconds;
????????request.Host?=?context.Request.Url.Host;
????????foreach?(?var?key?in?context.Request.Headers.AllKeys?)
????????{
??????????SetHeader(?request,?key,?context.Request.Headers.Get(?key?)?);
????????}
????????if?(?context.Request.ContentLength64?>?0?)
????????{
??????????using?(?var?stream?=?request.GetRequestStream()?)
??????????{
????????????var?buffer?=?new?byte[context.Request.ContentLength64];
????????????context.Request.InputStream.Read(?buffer,?0,?buffer.Length?);
????????????stream.Write(?buffer,?0,?buffer.Length?);
??????????}
????????}
????????HttpWebResponse?response;
????????try
????????{
??????????response?=?(HttpWebResponse)?request.GetResponse();
????????}
????????catch?(?WebException?e?)
????????{
??????????response?=?(HttpWebResponse)?e.Response;
??????????if?(?e.Status?!=?WebExceptionStatus.Success?)
??????????{
????????????Console.WriteLine(?"{0}?{1}...",?context.Request.Url,?e.Status.ToString()?);
????????????context.Response.Close();
????????????if?(?response?!=?null?)
??????????????response.Close();
????????????return;
??????????}
??????????//return;
????????}
????????using?(?response?)
????????{
??????????Console.WriteLine(?"{0}?response...",?context.Request.Url?);
??????????context.Response.StatusCode?=?(int)?response.StatusCode;
??????????context.Response.StatusDescription?=?response.StatusDescription;
??????????foreach?(?var?key?in?response.Headers.AllKeys?)
??????????{
????????????if?(?key.Equals(?"Content-Length",?StringComparison.InvariantCultureIgnoreCase?)?)
??????????????continue;
????????????if?(?key.Equals(?"Location",?StringComparison.InvariantCultureIgnoreCase?)?)
????????????{
??????????????context.Response.Redirect(?response.Headers.Get(?key?)?);
??????????????continue;
????????????}
????????????context.Response.Headers.Add(?key,?response.Headers.Get(?key?)?);
??????????}
??????????MemoryStream?memoryBuffer?=?new?MemoryStream();
??????????if?(?response.ContentLength?>?0?)
??????????{
????????????using?(?var?stream?=?response.GetResponseStream()?)
????????????{
??????????????byte[]?buffer?=?new?byte[1024];
??????????????while?(?true?)
??????????????{
????????????????int?length?=?stream.Read(?buffer,?0,?buffer.Length?);
????????????????if?(?length?==?0?)
??????????????????break;
????????????????memoryBuffer.Write(?buffer,?0,?length?);
??????????????}
????????????}
????????????memoryBuffer.Seek(?0,?SeekOrigin.Begin?);
????????????try
????????????{
??????????????if?(?response.ContentType.StartsWith(?"text/"?)?)
??????????????{
????????????????var?encoding?=?Encoding.GetEncoding(?response.CharacterSet?);
????????????????var?content?=?new?StreamReader(?memoryBuffer,?encoding?).ReadToEnd();
????????????????Console.WriteLine(?content?);
????????????????if?(?response.ContentType.Split(?';'?)[0]?==?"text/html"?)
????????????????{
??????????????????content?=?Cleanup(?context.Request.Url,?content?);
??????????????????memoryBuffer?=?new?MemoryStream(?encoding.GetBytes(?content?)?);
????????????????}
??????????????}
??????????????if?(?context.Request.Url.Equals(?new?Uri(?"http://www.cnblogs.com/ws/BlogPost.asmx/GetSiteHomePosts"?)?)?||?context.Request.Url.Equals(?new?Uri(?"http://www.cnblogs.com/ws/BlogPost.asmx/GetHeadline"?)?)?)
??????????????{
????????????????var?serializer?=?new?DataContractJsonSerializer(?typeof(?CnblogsJsonType?)?);
????????????????var?data?=?(CnblogsJsonType)?serializer.ReadObject(?memoryBuffer?);
????????????????data.d?=?Cleanup(?context.Request.Url,?data.d?);
????????????????memoryBuffer?=?new?MemoryStream();
????????????????serializer.WriteObject(?memoryBuffer,?data?);
??????????????}
????????????}
????????????catch?(?Exception?e?)
????????????{
??????????????Console.WriteLine(?e?);
????????????}
????????????memoryBuffer.WriteTo(?context.Response.OutputStream?);
??????????}
????????}
??????}
??????catch?(?Exception?e?)
??????{
????????Console.WriteLine(?e?);
??????}
??????context.Response.Close();
????}
????[DataContract]
????private?class?CnblogsJsonType
????{
??????[DataMember]
??????public?string?d?{?get;?set;?}
????}
????private?static?void?SetHeader(?HttpWebRequest?request,?string?key,?string?value?)
????{
??????switch?(?key?)
??????{
????????case?"Accept":
??????????request.Accept?=?value;
??????????break;
????????case?"Connection":
??????????if?(?value.Equals(?"Keep-Alive",?StringComparison.InvariantCultureIgnoreCase?)?)
??????????{
????????????request.KeepAlive?=?true;
????????????break;
??????????}
??????????if?(?value.Equals(?"Closed",?StringComparison.InvariantCultureIgnoreCase?)?)
????????????break;
??????????request.Connection?=?value;
??????????break;
????????case?"Content-Length":
??????????//request.ContentLength?=?long.Parse(?value?);
??????????break;
????????case?"Content-Type":
??????????request.ContentType?=?value;
??????????break;
????????case?"Date":
??????????request.Date?=?DateTime.Parse(?value?);
??????????break;
????????case?"Expect":
??????????request.Expect?=?value;
??????????break;
????????case?"Host":
??????????//request.Host?=?value;
??????????break;
????????case?"If-Modified-Since":
??????????request.IfModifiedSince?=?DateTime.Parse(?value?);
??????????break;
????????case?"Range":
??????????throw?new?NotSupportedException();
????????case?"Referer":
??????????request.Referer?=?value;
??????????break;
????????case?"Transfer-Encoding":
??????????request.TransferEncoding?=?value;
??????????break;
????????case?"User-Agent":
??????????request.UserAgent?=?value;
??????????break;
????????case?"Proxy-Connection":
??????????throw?new?NotSupportedException();
????????case?"Accept-Encoding":
??????????break;
????????default:
??????????request.Headers.Set(?key,?value?);
??????????break;
??????}
????}
????private?static?readonly?Regex?userBlogUrlRegex?=?new?Regex(?@"(^http://www.cnblogs.com/(?<username>\w+)/(?<resource>.*)$)|(^http://(?<username>\w+).cnblogs.com/(?<resource>.*)$)",?RegexOptions.Compiled?);
????private?static?readonly?string[]?blockedUsers?=?new[]?{?"firelong",?"huasheng"?};
????private?static?string?Cleanup(?Uri?url,?string?content?)
????{
??????var?rawDocument?=?new?HtmlDocument();
??????rawDocument.LoadHtml(?content?);
??????var?document?=?rawDocument.AsDocument();
??????document.Find(?"A"?).Select(?element?=>?element.Attribute(?"href"?)?).Where(?attribute?=>?attribute.Value()?!=?null?).ToArray()
????????.ForAll(?attribute?=>
??????????{
????????????var?href?=?new?Uri(?url,?attribute.Value()?).AbsoluteUri;
????????????var?match?=?userBlogUrlRegex.Match(?href?);
????????????if?(?blockedUsers.Contains(?match.Groups["username"].Value?)?)
????????????{
??????????????if?(?match.Groups["resource"].Value?!=?""?)
??????????????{
????????????????var?element?=?FindContainer(?attribute.Element?);
????????????????element.Remove();
??????????????}
??????????????else
????????????????attribute.Element.Remove();
????????????}
??????????}?);
??????return?document.OuterHtml();
????}
????private?static?IHtmlElement?FindContainer(?IHtmlElement?element?)
????{
??????var?container?=?element;
??????while?(?true?)
??????{
????????var?parent?=?container.Parent;
????????if?(?parent?==?null?)
??????????break;
????????if?(?parent.Find(?"A"?).Select(?e?=>?e.Attribute(?"href"?).Value()?).ToArray().NotNull().Count(?href?=>?userBlogUrlRegex.IsMatch(?href?)?)?>?1?)
??????????return?container;
????????container?=?parent?as?IHtmlElement;
????????if?(?container?==?null?)
??????????break;
??????}
??????return?element;
?
總結(jié)
以上是生活随笔為你收集整理的园林空气净化器永久测试版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL 黑洞引擎的使用场景解释
- 下一篇: ntp时间服务解析