⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bodyfilter.java

📁 一款Java实现的HTTP代理服务器
💻 JAVA
字号:
package rabbit.filter;import java.net.MalformedURLException;import java.net.URL;import rabbit.html.HtmlBlock;import rabbit.html.Tag;import rabbit.html.TagType;import rabbit.html.Token;import rabbit.http.HttpHeader;import rabbit.proxy.Connection;import rabbit.util.Config;/** A class that inserts some text and links at the top of a page. *  Useful for inserting links to unfiltered page. * * @author <a href="mailto:robo@khelekore.org">Robert Olofsson</a> */public class BodyFilter extends SimpleTagFilter {    private boolean done = false;    /** the identifier for pages filtered with this proxy. */    private static final String PREFIX = "This page is filtered by RabbIT ";    /** the string to append after our advertising. */    private static final String POSTFIX = "<br>";    /** the link string. */    private static final String LINK = "unfiltered page";    // for the factory.    public BodyFilter () {	    }    /** Create a new BodyFilter for the given request, response pair.     * @param con the Connection handling the request.     * @param request the actual request made.     * @param response the actual response being sent.     */    public BodyFilter (Connection con, 		       HttpHeader request, 		       HttpHeader response) {		super (con, request, response);    }        @Override     public HtmlFilter newFilter (Connection con, 				 HttpHeader request, 				 HttpHeader response) {	return new BodyFilter (con, request, response);    }    /** Insert some text at the top of the html page.     * @param block the part of the html page we are filtering.     */    public void filterHtml (HtmlBlock block) {	if (!done) {	    super.filterHtml (block);	}    }    public void handleTag (Tag tag, HtmlBlock block, int tokenIndex) {	if (tag.getTagType () == TagType.BODY) {	    insertTokens (block, tokenIndex + 1);	    done = true;	}    }        /** Insert the links in an ordered fashion.     * @param block the html block were filtering.     * @param pos the position in the block were inserting stuff at.     * @return the new position in the block.     */    protected int insertTokens (HtmlBlock block, int pos) {	Config config = con.getProxy ().getConfig ();	block.insertToken (new Token 			   (config.getProperty 			    (getClass ().getName (),			     "prefix", 			     PREFIX)),			   pos++);	if (config.getProperty (getClass ().getName (),				"unfilteredlink",				"true").toLowerCase ().equals ("true")) {	    Tag a = new Tag ("A");	    try {		URL url = new URL (request.getRequestURI ());		a.addArg ("HREF", getHref (url));		block.insertToken (new Token (a), pos++);		block.insertToken (new Token 				   (config.getProperty (getClass ().getName (),							"link",							LINK)),				   pos++);		Tag slasha = new Tag ("/A");		block.insertToken (new Token (slasha), pos++);	    } catch (MalformedURLException e) {		// ignore	    }	}	block.insertToken (new Token (config.getProperty 				      (getClass ().getName (),				       "postfix",				       POSTFIX)),			   pos++);	return pos;    }    private String getHref (URL url) {	StringBuilder sb = new StringBuilder ();	sb.append ("\"");	sb.append (url.getProtocol());	sb.append ("://noproxy.");	sb.append (url.getHost ());	sb.append ((url.getPort () > 0) ? ":" + url.getPort () : "");	sb.append (url.getFile ());	sb.append (((url.getRef() != null) ? "#" + url.getRef () : "") + "\"");	return sb.toString ();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -