import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpPost;
import org.springframework.util.StringUtils;
import com.yundaex.utility.stream.InputStreamUtils;
public class HttpUtil {
public static String getRequestContent(PostMethod post) throws Exception {
RequestEntity entity = post.getRequestEntity();
String content = "";
ByteArrayOutputStream baos = null;
if (entity != null ) {
try {
baos = new ByteArrayOutputStream();
entity.writeRequest(baos);
baos.flush();
byte[] bytes = baos.toByteArray();
if (entity instanceof ByteArrayRequestEntity) {
content = new String(bytes, "US-ASCII");
} else if(entity instanceof StringRequestEntity) {
String charset = post.getRequestCharSet();
content = new String(bytes, charset);
} else {
content = new String(bytes,"UTF-8");
}
} finally {
baos.close();
baos = null;
}
}
return content;
}
public static String getRequestContent(HttpEntityEnclosingRequestBase hp) throws Exception {
String content = "";
Header header = hp.getEntity().getContentType();
String contentType = header.getValue();
String contentEncoding = "UTF-8";
int charsetIndex = contentType.indexOf("charset=");
if (charsetIndex == -1) {
contentEncoding = "ISO-8859-1" ;
} else {
contentEncoding = contentType.substring(charsetIndex + 8);
}
HttpEntity httpEntity = hp.getEntity();
InputStream inputStream = httpEntity.getContent();
content = InputStreamUtils.getContentsAsString(inputStream, contentEncoding);
return content;
}
public static Map<String, String> getParameterMap(PostMethod post) throws Exception {
Map<String, String> map = new HashMap<String, String>();
String queryString = post.getQueryString();
map = parseKeyValue(map,queryString,"&","=");
NameValuePair[] pairs = post.getParameters();
for (NameValuePair nameValuePair : pairs) {
String key = nameValuePair.getName();
String value = nameValuePair.getValue();
map.put(key, value);
}
return map;
}
public static Map<String, String> getParameterMap(HttpPost hp) throws Exception {
Map<String, String> map = new HashMap<String, String>();
String url = hp.getURI().toString();
Header header = hp.getEntity().getContentType();
String contentType = header.getValue();
String contentEncoding = "UTF-8";
int charsetIndex = contentType.indexOf("charset=");
if (charsetIndex == -1) {
contentEncoding = "ISO-8859-1" ;
} else {
contentEncoding = contentType.substring(charsetIndex +1);
}
String content = InputStreamUtils.getContentsAsString(hp.getEntity().getContent(), contentEncoding);
map = parseUrlKeyValue(map,url,"&","=");
if (contentType.indexOf("application/x-www-form-urlencoded") !=-1) {
map = parseKeyValue(map,content,"&","=");
}
return map;
}
public static Map<String, String> getParameterMap(Map<String, String> map,String url,String content) throws Exception {
map = parseUrlKeyValue(map,url,"&","=");
map = parseKeyValue(map,content,"&","=");
return map;
}
public static Map<String, String> parseUrlKeyValue(Map<String, String> map,String url,String parameterSeparator,String nameValueSeparator) {
if (map == null) {
map = new HashMap<String, String>();
} else if (StringUtils.isEmpty(url)) {
return map;
}
int queryIndex = url.indexOf("?");
if (queryIndex != -1) {
String queryString = url.substring(queryIndex + 1);
map = parseKeyValue(map,queryString,parameterSeparator,nameValueSeparator);
}
return map;
}
public static Map<String, String> parseKeyValue(Map<String, String> map,String str,String parameterSeparator,String nameValueSeparator) {
if (map == null) {
map = new HashMap<String, String>();
} else if (StringUtils.isEmpty(str)) {
return map;
}
String[] queryPairs = str.split(parameterSeparator);
for (String queryPair : queryPairs) {
int index = queryPair.indexOf(nameValueSeparator);
if (index != -1) {
String key = queryPair.substring(0,index);
String value = queryPair.substring(index+1);
map.put(key, value);
}
}
return map;
}
}