warningshandler.java
来自「一款Java实现的HTTP代理服务器」· Java 代码 · 共 100 行
JAVA
100 行
package rabbit.proxy;import java.util.Date;import rabbit.http.HttpDateParser;import rabbit.http.HttpHeader;import rabbit.util.Logger;/** A class that handles warning headers. * * @author <a href="mailto:robo@khelekore.org">Robert Olofsson</a> */class WarningsHandler { private int nextNonBlank (String s, int start) { char c; int len = s.length (); while (start < len && ((c = s.charAt (start)) == ' ' || c == '\n' || c == '\r' || c == '\t')) start++; return start; } private int nextBlank (String s, int start) { char c; int len = s.length (); while (start < len && !((c = s.charAt (start)) == ' ' || c == '\n' || c == '\r' || c == '\t')) start++; return start; } public void removeWarnings (Logger logger, HttpHeader header, boolean remove1xx) { String rdate = header.getHeader ("Date"); for (String val : header.getHeaders ("Warning")) { try { StringBuilder sb = new StringBuilder (); boolean first = true; int start = 0; while (start < val.length ()) { int i = nextNonBlank (val, start); i = nextBlank (val, i); String code = val.substring (start, i); int j = nextNonBlank (val, i + 1); j = nextBlank (val, j); String agent = val.substring (i + 1, j); int k = val.indexOf ('"', j); int l = val.indexOf ('"', k + 1); // StringIndexOutOfBoundsException: -1 String text = val.substring (k + 1, l); int c = val.indexOf (',', l); int m = val.indexOf ('"', l + 1); String date = null; if (((c == -1 && m == -1) || (c < m))) { start = l + 1; } else { int n = val.indexOf ('"', m + 1); date = val.substring (m + 1, n); int c2 = val.indexOf (',', n + 1); if (c2 != -1) start = c2; else start = n + 1; } char s; while (start < val.length () && ((s = val.charAt (start)) == ' ' || s == ',')) start++; Date d1 = null, d2 = null; if (date != null) d1 = HttpDateParser.getDate (date); if (rdate != null) d2 = HttpDateParser.getDate (rdate); if ((d1 != null && !d1.equals (d2)) || (remove1xx && code.charAt (0) == '1') && !"RabbIT".equals (agent)) { } else { if (!first) sb.append (", "); sb.append (code + " " + agent + " \"" + text); sb.append (date != null ? "\" \"" + date + "\"" : "\""); first = false; } } if (sb.length () != 0) header.setExistingValue (val, sb.toString ()); else header.removeValue (val); } catch (StringIndexOutOfBoundsException e) { logger.logWarn ("bad warning header: '" + val + "'"); } } } public void updateWarnings (HttpHeader header, HttpHeader webheader) { for (String warn : webheader.getHeaders ("Warning")) header.addHeader ("Warning", warn); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?