java-http-请求-get-post-stream-模拟

转自:http://winhonourxzg.iteye.com/blog/461219

http://daimajishu.iteye.com/blog/961785

请求模拟
package org.zlex.commons.net;   
  
import java.io.DataInputStream;   
import java.io.DataOutputStream;   
import java.io.UnsupportedEncodingException;   
import java.net.HttpURLConnection;   
import java.net.URL;   
import java.net.URLDecoder;   
import java.net.URLEncoder;   
import java.util.Map;   
import java.util.Properties;   
  
/**  
* 网络工具  
*   
* @author 梁栋  
* @version 1.0  
* @since 1.0  
*/  
public abstract class NetUtils {   
    public static final String CHARACTER_ENCODING = "UTF-8";   
    public static final String PATH_SIGN = "/";   
    public static final String METHOD_POST = "POST";   
    public static final String METHOD_GET = "GET";   
    public static final String CONTENT_TYPE = "Content-Type";   
  
    /**  
     * 以POST方式向指定地址发送数据包请求,并取得返回的数据包  
     *   
     * @param urlString  
     * @param requestData  
     * @return 返回数据包  
     * @throws Exception  
     */  
    public static byte[] requestPost(String urlString, byte[] requestData)   
            throws Exception {   
        Properties requestProperties = new Properties();   
        requestProperties.setProperty(CONTENT_TYPE,   
                "application/octet-stream; charset=utf-8");   
  
        return requestPost(urlString, requestData, requestProperties);   
    }   
  
    /**  
     * 以POST方式向指定地址发送数据包请求,并取得返回的数据包  
     *   
     * @param urlString  
     * @param requestData  
     * @param requestProperties  
     * @return 返回数据包  
     * @throws Exception  
     */  
    public static byte[] requestPost(String urlString, byte[] requestData,   
            Properties requestProperties) throws Exception {   
        byte[] responseData = null;   
  
        HttpURLConnection con = null;   
  
        try {   
            URL url = new URL(urlString);   
            con = (HttpURLConnection) url.openConnection();   
  
            if ((requestProperties != null) && (requestProperties.size() > 0)) {   
                for (Map.Entry<Object, Object> entry : requestProperties   
                        .entrySet()) {   
                    String key = String.valueOf(entry.getKey());   
                    String value = String.valueOf(entry.getValue());   
                    con.setRequestProperty(key, value);   
                }   
            }   
  
            con.setRequestMethod(METHOD_POST); // 置为POST方法   
  
            con.setDoInput(true); // 开启输入流   
            con.setDoOutput(true); // 开启输出流   
  
            // 如果请求数据不为空,输出该数据。   
            if (requestData != null) {   
                DataOutputStream dos = new DataOutputStream(con   
                        .getOutputStream());   
                dos.write(requestData);   
                dos.flush();   
                dos.close();   
            }   
  
            int length = con.getContentLength();   
            // 如果回复消息长度不为-1,读取该消息。   
            if (length != -1) {   
                DataInputStream dis = new DataInputStream(con.getInputStream());   
                responseData = new byte[length];   
                dis.readFully(responseData);   
                dis.close();   
            }   
        } catch (Exception e) {   
            throw e;   
        } finally {   
            if (con != null) {   
                con.disconnect();   
                con = null;   
            }   
        }   
  
        return responseData;   
    }   
  
    /**  
     * 以POST方式向指定地址提交表单<br>  
     * arg0=urlencode(value0)&arg1=urlencode(value1)  
     *   
     * @param urlString  
     * @param formProperties  
     * @return 返回数据包  
     * @throws Exception  
     */  
    public static byte[] requestPostForm(String urlString,   
            Properties formProperties) throws Exception {   
        return requestPostForm(urlString, formProperties, null);   
    }   
  
    /**  
     * 以POST方式向指定地址提交表单<br>  
     * arg0=urlencode(value0)&arg1=urlencode(value1)  
     *   
     * @param urlString  
     * @param formProperties  
     * @param requestProperties  
     * @return 返回数据包  
     * @throws Exception  
     */  
    public static byte[] requestPostForm(String urlString,   
            Properties formProperties, Properties requestProperties)   
            throws Exception {   
        requestProperties.setProperty(HttpUtils.CONTENT_TYPE,   
                "application/x-www-form-urlencoded");   
  
        StringBuilder sb = new StringBuilder();   
  
        if ((formProperties != null) && (formProperties.size() > 0)) {   
            for (Map.Entry<Object, Object> entry : formProperties.entrySet()) {   
                String key = String.valueOf(entry.getKey());   
                String value = String.valueOf(entry.getValue());   
                sb.append(key);   
                sb.append("=");   
                sb.append(encode(value));   
                sb.append("&");   
            }   
        }   
  
        String str = sb.toString();   
        str = str.substring(0, (str.length() - 1)); // 截掉末尾字符&   
  
        return requestPost(urlString, str.getBytes(CHARACTER_ENCODING),   
                requestProperties);   
  
    }   
  
    /**  
     * url解码  
     *   
     * @param str  
     * @return 解码后的字符串,当异常时返回原始字符串。  
     */  
    public static String decode(String url) {   
        try {   
            return URLDecoder.decode(url, CHARACTER_ENCODING);   
        } catch (UnsupportedEncodingException ex) {   
            return url;   
        }   
    }   
  
    /**  
     * url编码  
     *   
     * @param str  
     * @return 编码后的字符串,当异常时返回原始字符串。  
     */  
    public static String encode(String url) {   
        try {   
            return URLEncoder.encode(url, CHARACTER_ENCODING);   
        } catch (UnsupportedEncodingException ex) {   
            return url;   
        }   
    }   
}  

/** 
* 2008-12-26 
*/ 
package org.zlex.commons.net; 

import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.UnsupportedEncodingException; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLDecoder; 
import java.net.URLEncoder; 
import java.util.Map; 
import java.util.Properties; 

/** 
* 网络工具 
* 
* @author 梁栋 
* @version 1.0 
* @since 1.0 
*/ 
public abstract class NetUtils { 
public static final String CHARACTER_ENCODING = "UTF-8"; 
public static final String PATH_SIGN = "/"; 
public static final String METHOD_POST = "POST"; 
public static final String METHOD_GET = "GET"; 
public static final String CONTENT_TYPE = "Content-Type"; 

/** 
* 以POST方式向指定地址发送数据包请求,并取得返回的数据包 
* 
* @param urlString 
* @param requestData 
* @return 返回数据包 
* @throws Exception 
*/ 
public static byte[] requestPost(String urlString, byte[] requestData) 
throws Exception { 
Properties requestProperties = new Properties(); 
requestProperties.setProperty(CONTENT_TYPE, 
"application/octet-stream; charset=utf-8"); 

return requestPost(urlString, requestData, requestProperties); 
} 

/** 
* 以POST方式向指定地址发送数据包请求,并取得返回的数据包 
* 
* @param urlString 
* @param requestData 
* @param requestProperties 
* @return 返回数据包 
* @throws Exception 
*/ 
public static byte[] requestPost(String urlString, byte[] requestData, 
Properties requestProperties) throws Exception { 
byte[] responseData = null; 

HttpURLConnection con = null; 

try { 
URL url = new URL(urlString); 
con = (HttpURLConnection) url.openConnection(); 

if ((requestProperties != null) && (requestProperties.size() > 0)) { 
for (Map.Entry<Object, Object> entry : requestProperties 
.entrySet()) { 
String key = String.valueOf(entry.getKey()); 
String value = String.valueOf(entry.getValue()); 
con.setRequestProperty(key, value); 
} 
} 

con.setRequestMethod(METHOD_POST); // 置为POST方法 

con.setDoInput(true); // 开启输入流 
con.setDoOutput(true); // 开启输出流 

// 如果请求数据不为空,输出该数据。 
if (requestData != null) { 
DataOutputStream dos = new DataOutputStream(con 
.getOutputStream()); 
dos.write(requestData); 
dos.flush(); 
dos.close(); 
} 

int length = con.getContentLength(); 
// 如果回复消息长度不为-1,读取该消息。 
if (length != -1) { 
DataInputStream dis = new DataInputStream(con.getInputStream()); 
responseData = new byte[length]; 
dis.readFully(responseData); 
dis.close(); 
} 
} catch (Exception e) { 
throw e; 
} finally { 
if (con != null) { 
con.disconnect(); 
con = null; 
} 
} 

return responseData; 
} 

/** 
* 以POST方式向指定地址提交表单<br> 
* arg0=urlencode(value0)&arg1=urlencode(value1) 
* 
* @param urlString 
* @param formProperties 
* @return 返回数据包 
* @throws Exception 
*/ 
public static byte[] requestPostForm(String urlString, 
Properties formProperties) throws Exception { 
return requestPostForm(urlString, formProperties, null); 
} 

/** 
* 以POST方式向指定地址提交表单<br> 
* arg0=urlencode(value0)&arg1=urlencode(value1) 
* 
* @param urlString 
* @param formProperties 
* @param requestProperties 
* @return 返回数据包 
* @throws Exception 
*/ 
public static byte[] requestPostForm(String urlString, 
Properties formProperties, Properties requestProperties) 
throws Exception { 
requestProperties.setProperty(HttpUtils.CONTENT_TYPE, 
"application/x-www-form-urlencoded"); 

StringBuilder sb = new StringBuilder(); 

if ((formProperties != null) && (formProperties.size() > 0)) { 
for (Map.Entry<Object, Object> entry : formProperties.entrySet()) { 
String key = String.valueOf(entry.getKey()); 
String value = String.valueOf(entry.getValue()); 
sb.append(key); 
sb.append("="); 
sb.append(encode(value)); 
sb.append("&"); 
} 
} 

String str = sb.toString(); 
str = str.substring(0, (str.length() - 1)); // 截掉末尾字符& 

return requestPost(urlString, str.getBytes(CHARACTER_ENCODING), 
requestProperties); 

} 

/** 
* url解码 
* 
* @param str 
* @return 解码后的字符串,当异常时返回原始字符串。 
*/ 
public static String decode(String url) { 
try { 
return URLDecoder.decode(url, CHARACTER_ENCODING); 
} catch (UnsupportedEncodingException ex) { 
return url; 
} 
} 

/** 
* url编码 
* 
* @param str 
* @return 编码后的字符串,当异常时返回原始字符串。 
*/ 
public static String encode(String url) { 
try { 
return URLEncoder.encode(url, CHARACTER_ENCODING); 
} catch (UnsupportedEncodingException ex) { 
return url; 
} 
} 
} 


注意上述requestPostForm()方法,是用来提交表单的。 
测试用例 
Java代码 
/**  
* 2009-8-21  
*/  
package org.zlex.commons.net;   
  
import static org.junit.Assert.*;   
  
import java.util.Properties;   
  
import org.junit.Test;   
  
/**  
* 网络工具测试  
*   
* @author 梁栋  
* @version 1.0  
* @since 1.0  
*/  
public class NetUtilsTest {   
  
    /**  
     * Test method for  
     * {@link org.zlex.commons.net.NetUtils#requestPost(java.lang.String, byte[])}  
     * .  
     */  
    @Test  
    public final void testRequestPostStringByteArray() throws Exception {   
        Properties requestProperties = new Properties();   
  
        // 模拟浏览器信息   
        requestProperties   
                .put(   
                        "User-Agent",   
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler ; .NET CLR 1.1.4322)");   
  
        byte[] b = NetUtils.requestPost("http://localhost:8080/zlex/post.do",   
                "XML".getBytes());   
        System.err.println(new String(b, "utf-8"));   
    }   
  
    /**  
     * Test method for  
     * {@link org.zlex.commons.net.NetUtils#requestPostForm(java.lang.String, java.util.Properties)}  
     * .  
     */  
    @Test  
    public final void testRequestPostForm() throws Exception {   
        Properties formProperties = new Properties();   
  
        formProperties.put("j_username", "Admin");   
        formProperties.put("j_password", "manage");   
  
        byte[] b = NetUtils.requestPostForm(   
                "http://localhost:8080/zlex/j_spring_security_check",   
                formProperties);   
        System.err.println(new String(b, "utf-8"));   
    }   
} 

+

+

+

=

+

+

+

猜你喜欢

转载自fantaxy025025.iteye.com/blog/2222327