package org.nutz.http;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLConnection;
import java.util.Enumeration;
import java.util.Iterator;
import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.nutz.lang.Encoding;
public class HttpDumper {
public static void duplicateHttpHeaders(HttpServletRequest request, URLConnection conn) {
Enumeration<?> en = request.getHeaderNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
conn.setRequestProperty(name, request.getHeader(name));
}
}
public static String dumpInputStream(HttpServletRequest request) {
StringBuilder sb = new StringBuilder();
sb.append(dumpHeaders(request));
sb.append('\n');
sb.append("<POSTDATA>");
sb.append('\n');
try {
InputStreamReader in = new InputStreamReader(request.getInputStream(), Encoding.CHARSET_UTF8);
int c;
while ((c = in.read()) != -1) {
sb.append((char) c);
}
in.close();
}
catch (IOException e) {
e.printStackTrace();
}
sb.append('\n');
sb.append("</POSTDATA>");
sb.append('\n');
return sb.toString();
}
public static String dumpData(HttpServletRequest request) {
Enumeration<?> en = request.getParameterNames();
StringBuilder sb = new StringBuilder();
sb.append(dumpHeaders(request));
sb.append('\n');
sb.append("<DATA>");
sb.append('\n');
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
sb.append(name + "=" + request.getParameter(name));
sb.append('\n');
}
sb.append("</DATA>");
sb.append('\n');
return sb.toString();
}
static public String dumpHeaders(HttpServletRequest request) {
StringBuilder sb = new StringBuilder();
Enumeration<?> em = request.getHeaderNames();
sb.append('\n');
sb.append("<HEADERS request=\"" + request.getRequestURL().toString());
if (null != request.getQueryString())
sb.append("?" + request.getQueryString());
sb.append("\"");
sb.append('\n' + "SESSIONid=\"" + request.getSession().getId() + "\"");
sb.append('\n' + "ServerName=\"" + request.getServerName() + "\"");
sb.append('\n' + "ServerPort=\"" + request.getServerPort() + "\"");
sb.append('\n' + "localAddr=\"" + request.getLocalAddr() + "\"");
sb.append('\n' + "localName=\"" + request.getLocalName() + "\"");
sb.append('\n' + "localPort=\"" + request.getLocalPort() + "\"");
sb.append('\n' + "RemoteAddr=\"" + request.getRemoteAddr() + "\"");
sb.append('\n' + "RemoteHost=\"" + request.getRemoteHost() + "\"");
sb.append('\n' + "RemotePort=\"" + request.getRemotePort() + "\"");
sb.append('\n' + "Encoding=\"" + request.getCharacterEncoding() + "\"");
sb.append('\n' + "Method=\"" + request.getMethod() + "\"");
sb.append(">");
while (em.hasMoreElements()) {
String name = (String) em.nextElement();
sb.append('\n');
sb.append("[" + name + "]:");
sb.append(request.getHeader(name));
}
sb.append('\n');
sb.append("</HEADERS>");
return sb.toString();
}
public static String dumpHeaders(URLConnection conn) {
StringBuilder sb = new StringBuilder();
Iterator<?> it = conn.getHeaderFields().keySet().iterator();
sb.append('\n');
sb.append("<HEADERS url=\"" + conn.getURL().toString() + "\">");
while (it.hasNext()) {
String name = (String) it.next();
sb.append('\n');
sb.append("[" + name + "]:");
sb.append(conn.getHeaderField(name));
}
sb.append('\n');
sb.append("</HEADERS>");
return sb.toString();
}
public static String dumpSessionAttributes(HttpSession session) {
StringBuilder sb = new StringBuilder();
Enumeration<?> en = session.getAttributeNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
sb.append("[" + name + "]: " + session.getAttribute(name) + '\n');
}
return sb.toString();
}
public static String dumpContextAttributes(ServletContext context) {
StringBuilder sb = new StringBuilder();
Enumeration<?> en = context.getAttributeNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
sb.append("[" + name + "]: " + context.getAttribute(name) + '\n');
}
return sb.toString();
}
public static String dumpRequestAttributes(ServletRequest request) {
StringBuilder sb = new StringBuilder();
Enumeration<?> en = request.getAttributeNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
sb.append("[" + name + "]: " + request.getAttribute(name) + '\n');
}
return sb.toString();
}
public static String dumpRequestParams(ServletRequest request) {
StringBuilder sb = new StringBuilder();
Enumeration<?> en = request.getParameterNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
sb.append("[" + name + "]: " + request.getParameter(name) + '\n');
}
return sb.toString();
}
public static String getUserAgent(HttpServletRequest request) {
return request.getHeader("User-Agent");
}
public static String dumpBrief(HttpServletRequest request) {
StringBuilder sb = new StringBuilder();
Enumeration<?> en = request.getParameterNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
sb.append(name);
String v = request.getParameter(name);
if (v != null) {
sb.append("=");
sb.append(v);
}
if (en.hasMoreElements())
sb.append("&");
}
return String.format( "%5s:%15s[%5s]%s",
new Object[]{ request.getLocale().toString(),
request.getRemoteAddr(),
((HttpServletRequest) request).getMethod(),
((HttpServletRequest) request) .getRequestURL()
.toString()
+ (sb.length() > 0 ? "?" + sb.toString()
: "")});
}
}