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