java 模拟HTTP doPost请求 设置参数

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

 

请求模拟 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")); } }

 

 

 

最近做一接口,要通过JAVA类请求SERVLET ,DOPOST方法.
不知道怎么把我的参数传过去.在网上找了几个例子.
都不行.
方法一:

package com.3sfg.setvlet; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.URIException; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.commons.httpclient.util.URIUtil; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * HTTP工具箱 * * @author leizhimin 2009-6-19 16:36:18 */ public final class HttpTookit { private static Log log = LogFactory.getLog(HttpTookit.class); /** * 执行一个HTTP GET请求,返回请求响应的HTML * * @param url 请求的URL地址 * @param queryString 请求的查询参数,可以为null * @param charset 字符集 * @param pretty 是否美化 * @return 返回请求响应的HTML */ public static String doGet(String url, String queryString, String charset, boolean pretty) { StringBuffer response = new StringBuffer(); HttpClient client = new HttpClient(); HttpMethod method = new GetMethod(url); try { if (StringUtils.isNotBlank(queryString)) //对get请求参数做了http请求默认编码,好像没有任何问题,汉字编码后,就成为%式样的字符串 method.setQueryString(URIUtil.encodeQuery(queryString)); client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), charset)); String line; while ((line = reader.readLine()) != null) { if (pretty) response.append(line).append(System.getProperty("line.separator")); else response.append(line); } reader.close(); } } catch (URIException e) { log.error("执行HTTP Get请求时,编码查询字符串“" + queryString + "”发生异常!", e); } catch (IOException e) { log.error("执行HTTP Get请求" + url + "时,发生异常!", e); } finally { method.releaseConnection(); } return response.toString(); } /** * 执行一个HTTP POST请求,返回请求响应的HTML * * @param url 请求的URL地址 * @param params 请求的查询参数,可以为null * @param charset 字符集 * @param pretty 是否美化 * @return 返回请求响应的HTML */ public static String doPost(String url, Map<String, String> params, String charset, boolean pretty) { StringBuffer response = new StringBuffer(); HttpClient client = new HttpClient(); HttpMethod method = new PostMethod(url); //设置Http Post数据 if (params != null) { HttpMethodParams p = new HttpMethodParams(); for (Map.Entry<String, String> entry : params.entrySet()) { p.setParameter(entry.getKey(), entry.getValue()); } p.setParameter("abc", "efg"); method.setParams(p); } try { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), charset)); String line; while ((line = reader.readLine()) != null) { if (pretty) response.append(line).append(System.getProperty("line.separator")); else response.append(line); } reader.close(); } } catch (IOException e) { log.error("执行HTTP Post请求" + url + "时,发生异常!", e); } finally { method.releaseConnection(); } return response.toString(); } public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("parax", "123456"); String y = doGet("http://127.0.0.1:8080/AIRP/servletTest", "xx=00", "GBK", true); String z = doPost("http://127.0.0.1:8080/AIRP/servletTest?", map, "GBK", false); System.out.println(y); System.out.println(z); } }

POST 方法 ,我在servletJ里,取不知任何参数,请求帮助.
感谢.
方法二:
private static String testPost(String MSG_ID,String MOBILE_NO,String CONTENT, String SERVICE_ID,String PASS,String SP_CODE,String LINK_ID, String FEE_TYPE,String FEE_CODE) throws IOException { URL url = new URL("http://127.0.0.1:8080/AIRP/servletTest"); URLConnection connection = url.openConnection(); connection.setDoOutput(true); OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "utf-8"); out.write("MSG_ID="+MSG_ID+"&MOBILE_NO="+MOBILE_NO+"&ACTION_ID=3" +"&SERVICE_ID=99&PASS=asdfasd" +"&SP_CODE=10625777&LINK_ID="); //向页面传递数据。post的关键所在! // remember to clean up out.flush(); out.close(); String sCurrentLine; String sTotalString; sCurrentLine = ""; sTotalString = ""; InputStream l_urlStream; l_urlStream = connection.getInputStream(); // 传说中的三层包装阿! BufferedReader l_reader = new BufferedReader(new InputStreamReader( l_urlStream)); while ((sCurrentLine = l_reader.readLine()) != null) { sTotalString += sCurrentLine + "/r/n"; } System.out.println(sTotalString); return sTotalString; }

你可能感兴趣的:(java,exception,properties,String,import,character)