HTTP客户端工具

来源:互联网 发布:牙齿黄了怎么变白知乎 编辑:程序博客网 时间:2024/06/10 14:05
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
/**
 * HTTP客户端工具
 *
 * @version 1.00
 * @date 2008/06/26
 */
public class HttpTool {
    /**
     * 默认编码UTF-8
     */
    private static String enc = "UTF-8";
    /**
     *
     * @param url URL
     * @param hm 哈希表
     * @param cookie 指定HTTP头Cookie字符串
     * @return 服务端响应字符串
     */
    public static HashMap postData(String url, HashMap hm, String cookie) {
        HashMap returnMap = new HashMap();
        HttpClient client = new HttpClient();
        PostMethod method = new UTF8PostMethod(url);
        try {
            if (cookie != null && cookie.length() > 0) {
                method.setRequestHeader("Cookie", cookie);
            }
            if (hm != null) {
                NameValuePair[] data = new NameValuePair[hm.size()];
                int i = 0;
                for (Object key : hm.keySet()) {
                    data[i++] = new NameValuePair(key.toString(), hm.get(key).toString());
                }
                method.setRequestBody(data);
            }
            client.executeMethod(method);
            if (cookie != null && cookie.length() > 0) {
                Header newCookieHeader = method.getResponseHeader("Set-Cookie");
                Header currentCookieHeader = method.getRequestHeader("Cookie");
                if (newCookieHeader != null) {
                    if (currentCookieHeader == null)
                        method.setRequestHeader("Cookie", newCookieHeader.getValue());
                    else
                        method.setRequestHeader("Cookie", currentCookieHeader.getValue() + "; " + newCookieHeader.getValue());
                }
            }
            returnMap.put("string", new String(method.getResponseBody(), enc));
            returnMap.put("cookie", method.getRequestHeader("Cookie").getValue());
        } catch (Exception e) {
            System.err.println("发生异常 原因: " + e.toString());
        } finally {
            method.releaseConnection();
        }
        return returnMap;
    }
    /**
     *
     * @param url URL
     * @param hm 哈希表
     * @return 服务端响应字符串
     */
    public static HashMap postData(String url, HashMap hm) {
        return postData(url, hm, "");
    }
    /**
     *
     * @param url URL
     * @param hm 哈希表
     * @param request HttpServletRequest对象
     * @return 服务端响应字符串
     */
    public static HashMap postData(String url, HashMap hm, HttpServletRequest request) {
        if (request != null) {
            return postData(url, hm, request.getHeader("cookie"));
        } else {
            return postData(url, hm);
        }
    }
    /**
     *
     * @param url URL
     * @param hm 哈希表
     * @param map 上次响应结果
     * @return 服务端响应字符串
     */
    public static HashMap postData(String url, HashMap hm, HashMap map) {
        if (map != null && map.get("cookie") != null) {
            return postData(url, hm, (String) map.get("cookie"));
        } else {
            return postData(url, hm);
        }
    }
    /**
     *
     * @param url URL
     * @param cookie 指定HTTP头Cookie字符串
     * @return 服务端响应字符串
     */
    public static HashMap getData(String url, String cookie) {
        HashMap returnMap = new HashMap();
        HttpClient client = new HttpClient();
        GetMethod method = new UTF8GetMethod(url);
        try {
            if (cookie != null && cookie.length() > 0) {
                method.setRequestHeader("Cookie", cookie);
            }
            client.executeMethod(method);
            if (cookie != null && cookie.length() > 0) {
                Header newCookieHeader = method.getResponseHeader("Set-Cookie");
                Header currentCookieHeader = method.getRequestHeader("Cookie");
                if (newCookieHeader != null) {
                    if (currentCookieHeader == null)
                        method.setRequestHeader("Cookie", newCookieHeader.getValue());
                    else
                        method.setRequestHeader("Cookie", currentCookieHeader.getValue() + "; " + newCookieHeader.getValue());
                }
            }
            returnMap.put("string", new String(method.getResponseBody(), enc));
            returnMap.put("cookie", method.getRequestHeader("Cookie").getValue());
        } catch (Exception e) {
            System.err.println("发生异常 原因: " + e.toString());
        } finally {
            method.releaseConnection();
        }
        return returnMap;
    }
    /**
     *
     * @param url URL
     * @return 服务端响应字符串
     */
    public static HashMap getData(String url) {
        return getData(url, "");
    }
    /**
     *
     * @param url URL
     * @param request HttpServletRequest对象
     * @return 服务端响应字符串
     */
    public static HashMap getData(String url, HttpServletRequest request) {
        if (request != null) {
            return getData(url, request.getHeader("cookie"));
        } else {
            return getData(url);
        }
    }
    /**
     *
     * @param url URL
     * @param map 上次响应结果
     * @return 服务端响应字符串
     */
    public static HashMap getData(String url, HashMap map) {
        if (map != null && map.get("cookie") != null) {
            return getData(url, (String) map.get("cookie"));
        } else {
            return getData(url);
        }
    }
    /**
     * Inner class for UTF-8 support
     */
    public static class UTF8PostMethod extends PostMethod {
        /**
         * @param url URL
         */
        public UTF8PostMethod(String url) {
            super(url);
        }
        /**
         * @return 默认编码
         */
        public String getRequestCharSet() {
            // return super.getRequestCharSet();
            return enc;
        }
    }
    /**
     * Inner class for UTF-8 support
     */
    public static class UTF8GetMethod extends GetMethod {
        /**
         * @param url URL
         */
        public UTF8GetMethod(String url) {
            super(url);
        }
        /**
         * @return 默认编码
         */
        public String getRequestCharSet() {
            // return super.getRequestCharSet();
            return enc;
        }
    }
}
原创粉丝点击