📄 httprequestheader.java
字号:
/* $Id: HTTPRequestHeader.java,v 1.4 2000/09/13 10:35:45 wastl Exp $ */
package net.wastl.webmail.server.http;
import java.io.*;
import java.util.*;
import javax.activation.DataSource;
import javax.mail.*;
import javax.mail.internet.*;
import gnu.regexp.*;
import net.wastl.webmail.server.*;
import net.wastl.webmail.misc.*;
import net.wastl.webmail.exceptions.TimeoutException;
import net.wastl.webmail.debug.ErrorHandler;
import net.wastl.webmail.exceptions.*;
/**
* HTTPHeader.java
*
*
* Created: Tue Feb 2 15:25:48 1999
*
* @author Sebastian Schaffert
* @version
*/
public class HTTPRequestHeader {
private Hashtable content;
private Hashtable headers;
public HTTPRequestHeader() {
headers=new Hashtable(10,.9f);
content=new Hashtable(5,.9f);
}
public String getMethod() {
return getHeader("Method");
}
public String getPath() {
return getHeader("Path");
}
public String getVersion() {
return getHeader("Version");
}
public void setPath(String s) {
setHeader("PATH",Urlify.unUrlify(s));
}
public void setMethod(String s) {
setHeader("METHOD",s);
}
public void setVersion(String s) {
setHeader("VERSION",s);
}
public void setEncodedContent(String url_encoded, String contenttype) {
if(contenttype.toLowerCase().startsWith("application/x-www-form-urlencoded")) {
StringTokenizer t=new StringTokenizer(url_encoded,"&");
while(t.hasMoreTokens()) {
try {
String str=t.nextToken();
StringTokenizer tok=new StringTokenizer(str,"=\r\n");
String key="";
String value="";
try {
key=Urlify.unUrlify(tok.nextToken());
value=Urlify.unUrlify(tok.nextToken());
} catch(Exception e) {
} finally {
content.put(key.toUpperCase(),value);
}
} catch(NoSuchElementException e) {
e.printStackTrace();
System.err.println("While reading post");
}
}
} else if(contenttype.toLowerCase().startsWith("multipart/form-data")) {
String s="Content-type: "+headers.get("CONTENT-TYPE")+"\nContent-length: "+headers.get("CONTENT-LENGTH")+"\n"
+ url_encoded;
try {
HTTPDataSource ds=new HTTPDataSource(s,((String)headers.get("CONTENT-TYPE")));
MimeMultipart m=new MimeMultipart(ds);
//System.err.println("Parts: "+m.getCount());
for(int i=0;i<m.getCount();i++) {
MimeBodyPart p=(MimeBodyPart)m.getBodyPart(i);
Enumeration enum=p.getAllHeaders();
while(enum.hasMoreElements()) {
Header h=(Header)enum.nextElement();
//System.err.println(h.getName()+" "+h.getValue());
}
p.setHeader("Content-Transfer-Encoding","binary");
p.setHeader("Content-Type","application/octet-stream");
//System.err.println(p.getFileName());
String disp=p.getHeader("CONTENT-DISPOSITION",";");
RE name_re=new RE("name\\=\"([^\"]+)\"",RE.REG_MULTILINE);
REMatch name_m=name_re.getMatch(disp);
String name=name_m.substituteInto("$1");
ByteStore bs=parseMIME(p);
bs.setName(p.getFileName());
bs.setContentType(WebMailServer.getStorage().getMimeType(p.getFileName()));
content.put(name.toUpperCase(),bs);
}
} catch(Exception e) {
e.printStackTrace();
}
} else {
System.err.println("Unsupported contenttype! "+contenttype);
}
}
public void setHeader(String key, String value) {
if(headers == null) {
headers=new Hashtable();
}
//System.out.println("DEBUG: Setting "+key.trim().toUpperCase()+" to "+value);
headers.put(key.toUpperCase(), value);
}
public String getHeader(String t) {
return (String)headers.get(t.toUpperCase());
}
public Hashtable getContent() {
return content;
}
public Object getObjContent(String key) {
if(content!=null) {
return content.get(key.toUpperCase());
} else {
return null;
}
}
public String getContent(String key) {
if(content!=null) {
Object o=content.get(key.toUpperCase());
if(o == null) {
return null;
} else if(o instanceof String) {
return (String)o;
} else if(o instanceof ByteStore) {
return new String(((ByteStore)o).getBytes());
} else {
return "";
}
//return (String)content.get(key.toUpperCase());
} else {
return "";
}
}
public boolean isContentSet(String key) {
Object s=content.get(key.toUpperCase());
return s != null && !(s instanceof String && ((String)s).trim().equals(""));
}
public void setContent(String key, String value) {
content.put(key.toUpperCase(),value);
}
public Enumeration getHeaderKeys() {
return headers.keys();
}
public Enumeration getContentKeys() {
return content.keys();
}
public String toString() {
String s="Method: "+headers.get("METHOD")+", Path="+headers.get("PATH")+", HTTP-version: "+headers.get("VERSION")+"\n";
s+="HTTP Headers:\n";
Enumeration e=headers.keys();
while(e.hasMoreElements()) {
String h=(String)e.nextElement();
s+="Header name: "+h+", value: "+headers.get(h)+"\n";
}
if(content != null) {
s+="Form Content:\n";
e=content.keys();
while(e.hasMoreElements()) {
String h=(String)e.nextElement();
s+="Header name: "+h+", value: "+content.get(h)+"\n";
}
}
return s;
}
protected static ByteStore parseMIME(MimeBodyPart p) {
try {
InputStream in=null;
String type="";
int size=Integer.parseInt(WebMailServer.getStorage().getConfig("max attach size"));
if(p instanceof MimeBodyPart) {
MimeBodyPart mpb=(MimeBodyPart)p;
InputStream is=mpb.getInputStream();
/* Workaround for Java or Javamail Bug */
in=new BufferedInputStream(is);
ByteStore ba=ByteStore.getBinaryFromIS(in,size);
in=new ByteArrayInputStream(ba.getBytes());
/* End of workaround */
size=in.available();
} else {
//System.err.println("*** No MIME Body part!! ***");
in=p.getInputStream();
}
ByteStore data=ByteStore.getBinaryFromIS(in,size);
//data.setContentType(p.getContentType());
data.setContentEncoding(p.getHeader("Content-Transfer-Encoding")[0]);
return data;
} catch(Exception e) {
return null;
}
}
protected class HTTPDataSource implements DataSource {
InputStream is;
String contenttype;
HTTPDataSource(String in, String cont) {
contenttype=cont;
is=new ByteArrayInputStream(in.getBytes());
}
public InputStream getInputStream() throws IOException {
if(is==null) {
throw new IOException("No InputStream");
}
return is;
}
public OutputStream getOutputStream() throws IOException {
throw new IOException();
}
public String getContentType() {
return contenttype;
}
public String getName() {
return "NoName";
}
}
} // HTTPHeader
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -