`
312350968
  • 浏览: 212590 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java自带的GET,POST提交

阅读更多

package com.clouds.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.log4j.Logger;

public class HttpRequestProxy {

	/**
	 * 连接超时
	 */
	private static int connectTimeOut = 5000;

	/**
	 * 读取数据超时
	 */
	private static int readTimeOut = 10000;

	/**
	 * 请求编码
	 */
	private static String requestEncoding = "GBK";

	private static Logger logger = Logger.getLogger(HttpRequestProxy.class);


	/**
	 * @return 连接超时(毫秒)
	 * @see com.hengpeng.common.web.HttpRequestProxy#connectTimeOut
	 */
	public static int getConnectTimeOut() {
		return HttpRequestProxy.connectTimeOut;
	}

	/**
	 * @return 读取数据超时(毫秒)
	 * @see com.hengpeng.common.web.HttpRequestProxy#readTimeOut
	 */
	public static int getReadTimeOut() {
		return HttpRequestProxy.readTimeOut;
	}

	/**
	 * @return 请求编码
	 * @see com.hengpeng.common.web.HttpRequestProxy#requestEncoding
	 */
	public static String getRequestEncoding() {
		return requestEncoding;
	}

	/**
	 * @param connectTimeOut 连接超时(毫秒)
	 * @see com.hengpeng.common.web.HttpRequestProxy#connectTimeOut
	 */
	public static void setConnectTimeOut(int connectTimeOut) {
		HttpRequestProxy.connectTimeOut = connectTimeOut;
	}

	/**
	 * @param readTimeOut 读取数据超时(毫秒)
	 * @see com.hengpeng.common.web.HttpRequestProxy#readTimeOut
	 */
	public static void setReadTimeOut(int readTimeOut) {
		HttpRequestProxy.readTimeOut = readTimeOut;
	}

	/**
	 * @param requestEncoding 请求编码
	 * @see com.hengpeng.common.web.HttpRequestProxy#requestEncoding
	 */
	public static void setRequestEncoding(String requestEncoding) {
		HttpRequestProxy.requestEncoding = requestEncoding;
	}
	
	
	/**
	 * <pre>
	 * 发送带参数的GET的HTTP请求
	 * </pre>
	 * 
	 * @param reqUrl HTTP请求URL
	 * @param parameters 参数映射表
	 * @return HTTP响应的字符串
	 */
	public static String doGet(String reqUrl, Map<?, ?> parameters, String recvEncoding) {
		HttpURLConnection url_con = null;
		String responseContent = null;
		try {
			StringBuffer params = new StringBuffer();
			for (Iterator<?> iter = parameters.entrySet().iterator(); iter.hasNext();) {
				Entry<?, ?> element = (Entry<?, ?>) iter.next();
				params.append(element.getKey().toString());
				params.append("=");
				params.append(URLEncoder.encode(element.getValue().toString(), HttpRequestProxy.requestEncoding));
				params.append("&");
			}

			if (params.length() > 0) {
				params = params.deleteCharAt(params.length() - 1);
			}

			URL url = new URL(reqUrl);
			url_con = (HttpURLConnection) url.openConnection();
			url_con.setRequestMethod("GET");
			System.setProperty("sun.net.client.defaultConnectTimeout", String.valueOf(HttpRequestProxy.connectTimeOut));// (单位:毫秒)jdk1.4换成这个,连接超时
			System.setProperty("sun.net.client.defaultReadTimeout", String.valueOf(HttpRequestProxy.readTimeOut)); // (单位:毫秒)jdk1.4换成这个,读操作超时
			// url_con.setConnectTimeout(5000);//(单位:毫秒)jdk
			// 1.5换成这个,连接超时
			// url_con.setReadTimeout(5000);//(单位:毫秒)jdk 1.5换成这个,读操作超时
			url_con.setDoOutput(true);
			byte[] b = params.toString().getBytes();
			url_con.getOutputStream().write(b, 0, b.length);
			url_con.getOutputStream().flush();
			url_con.getOutputStream().close();

			InputStream in = url_con.getInputStream();
			BufferedReader rd = new BufferedReader(new InputStreamReader(in, recvEncoding));
			String tempLine = rd.readLine();
			StringBuffer temp = new StringBuffer();
			String crlf = System.getProperty("line.separator");
			while (tempLine != null) {
				temp.append(tempLine);
				temp.append(crlf);
				tempLine = rd.readLine();
			}
			responseContent = temp.toString();
			rd.close();
			in.close();
		}
		catch (IOException e) {
			logger.error("网络故障", e);
		}
		finally {
			if (url_con != null) {
				url_con.disconnect();
			}
		}

		return responseContent;
	}

	/**
	 * <pre>
	 * 发送不带参数的GET的HTTP请求
	 * </pre>
	 * 
	 * @param reqUrl HTTP请求URL
	 * @return HTTP响应的字符串
	 */
	public static String doGet(String reqUrl, String recvEncoding) {
		HttpURLConnection url_con = null;
		String responseContent = null;
		try {
			StringBuffer params = new StringBuffer();
			String queryUrl = reqUrl;
			int paramIndex = reqUrl.indexOf("?");

			if (paramIndex > 0) {
				queryUrl = reqUrl.substring(0, paramIndex);
				String parameters = reqUrl.substring(paramIndex + 1, reqUrl.length());
				String[] paramArray = parameters.split("&");
				for (int i = 0; i < paramArray.length; i++) {
					String string = paramArray[i];
					int index = string.indexOf("=");
					if (index > 0) {
						String parameter = string.substring(0, index);
						String value = string.substring(index + 1, string.length());
						params.append(parameter);
						params.append("=");
						params.append(URLEncoder.encode(value, HttpRequestProxy.requestEncoding));
						params.append("&");
					}
				}

				params = params.deleteCharAt(params.length() - 1);
			}

			URL url = new URL(queryUrl);
			url_con = (HttpURLConnection) url.openConnection();
			url_con.setRequestMethod("GET");
			System.setProperty("sun.net.client.defaultConnectTimeout", String.valueOf(HttpRequestProxy.connectTimeOut));// (单位:毫秒)jdk1.4换成这个,连接超时
			System.setProperty("sun.net.client.defaultReadTimeout", String.valueOf(HttpRequestProxy.readTimeOut)); // (单位:毫秒)jdk1.4换成这个,读操作超时
			// url_con.setConnectTimeout(5000);//(单位:毫秒)jdk
			// 1.5换成这个,连接超时
			// url_con.setReadTimeout(5000);//(单位:毫秒)jdk 1.5换成这个,读操作超时
			url_con.setDoOutput(true);
			byte[] b = params.toString().getBytes();
			url_con.getOutputStream().write(b, 0, b.length);
			url_con.getOutputStream().flush();
			url_con.getOutputStream().close();
			InputStream in = url_con.getInputStream();
			BufferedReader rd = new BufferedReader(new InputStreamReader(in, recvEncoding));
			String tempLine = rd.readLine();
			StringBuffer temp = new StringBuffer();
			String crlf = System.getProperty("line.separator");
			while (tempLine != null) {
				temp.append(tempLine);
				temp.append(crlf);
				tempLine = rd.readLine();
			}
			responseContent = temp.toString();
			rd.close();
			in.close();
		}
		catch (IOException e) {
			logger.error("网络故障", e);
		}
		finally {
			if (url_con != null) {
				url_con.disconnect();
			}
		}

		return responseContent;
	}

	/**
	 * <pre>
	 * 发送带参数的POST的HTTP请求
	 * </pre>
	 * 
	 * @param reqUrl HTTP请求URL
	 * @param parameters 参数映射表
	 * @return HTTP响应的字符串
	 */
	public static String doPost(String reqUrl, Map<String, String> parameters, String recvEncoding) {
		HttpURLConnection url_con = null;
		String responseContent = null;
		try {
			StringBuffer params = new StringBuffer();
			for (Iterator<?> iter = parameters.entrySet().iterator(); iter.hasNext();) {
				Entry<?, ?> element = (Entry<?, ?>) iter.next();
				params.append(element.getKey().toString());
				params.append("=");
				params.append(URLEncoder.encode(element.getValue().toString(), HttpRequestProxy.requestEncoding));
				params.append("&");
			}

			if (params.length() > 0) {
				params = params.deleteCharAt(params.length() - 1);
			}

			URL url = new URL(reqUrl);
			url_con = (HttpURLConnection) url.openConnection();
			url_con.setRequestMethod("POST");
			System.setProperty("sun.net.client.defaultConnectTimeout", String.valueOf(HttpRequestProxy.connectTimeOut));// (单位:毫秒)jdk1.4换成这个,连接超时
			System.setProperty("sun.net.client.defaultReadTimeout", String.valueOf(HttpRequestProxy.readTimeOut)); // (单位:毫秒)jdk1.4换成这个,读操作超时
			// url_con.setConnectTimeout(5000);//(单位:毫秒)jdk
			// 1.5换成这个,连接超时
			// url_con.setReadTimeout(5000);//(单位:毫秒)jdk 1.5换成这个,读操作超时
			url_con.setDoOutput(true);
			byte[] b = params.toString().getBytes();
			url_con.getOutputStream().write(b, 0, b.length);
			url_con.getOutputStream().flush();
			url_con.getOutputStream().close();

			InputStream in = url_con.getInputStream();
			BufferedReader rd = new BufferedReader(new InputStreamReader(in, recvEncoding));
			String tempLine = rd.readLine();
			StringBuffer tempStr = new StringBuffer();
			String crlf = System.getProperty("line.separator");
			while (tempLine != null) {
				tempStr.append(tempLine);
				tempStr.append(crlf);
				tempLine = rd.readLine();
			}
			responseContent = tempStr.toString();
			rd.close();
			in.close();
		}
		catch (IOException e) {
			logger.error("网络故障", e);
		}
		finally {
			if (url_con != null) {
				url_con.disconnect();
			}
		}
		return responseContent;
	}


	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("data","a:3:{s:4:%22spec%22;a:2:{s:1:%228%22;s:2:%2243%22;s:2:%2211%22;s:9:%22%E6%B5%85%E8%93%9D%E8%89%B2%22;}s:13:%22spec_value_id%22;a:2:{s:1:%228%22;s:3:%22119%22;s:2:%2211%22;s:3:%22144%22;}s:21:%22spec_private_value_id%22;a:2:{s:1:%228%22;s:11:%2287175758783%22;s:2:%2211%22;s:11:%2287175758784%22;}}");
		String temp = HttpRequestProxy.doPost("http://demo2.test.com/api/unserialize.php", map, "utf-8");
		System.out.println("返回的消息是:" + temp);
	}

}
 
分享到:
评论

相关推荐

    javaHttp的get与post自带api简单实现

    javahttp的简单使用。javaHttp的get与post自带api简单实现。java get post的使用记录

    Java自带的HttpURLConnection访问接口实现文件上传

    这个接口在java.net包下,是处理HTTP请求的基础类,包括发送GET、POST等请求,以及文件上传功能。在本文中,我们将深入探讨如何使用HttpURLConnection实现文件上传,同时也会涉及普通参数的传递。 首先,我们需要...

    android http post/get

    GET用于获取资源,而POST则用于向服务器发送数据,通常用于提交表单或创建新资源。 **1. Android HTTP GET请求** GET请求通常用于从服务器获取数据。在Android中,我们可以使用HttpURLConnection或者第三方库如...

    Android-HttpClient工具类简单轻松的实现getpostput和delete请求

    在Android开发过程中,网络请求是不可或缺的一部分,而`HttpClient`是一个强大的HTTP客户端库,它允许开发者执行各种HTTP操作,如GET、POST、PUT和DELETE。本篇文章将详细讲解如何使用`HttpClient`工具类来简化这些...

    JAVA发送HTTP请求,返回HTTP响应内容,应用及实例代码

    JDK(Java Development Kit)自带的`java.net`包提供了基础的HTTP支持,包括发送GET和POST请求。这里我们将详细讲解如何使用Java发送HTTP请求,并获取响应内容。 首先,我们需要创建一个用于封装HTTP请求逻辑的类,...

    JAVA 的WebService 支持

    它利用HTTP方法(如GET、POST、PUT等)来定义资源的操作,更适合现代Web应用的需求。 #### 实现工具:Apache CXF 在实际开发过程中,Apache CXF是常用的实现JAVA WebService的工具之一。CXF的核心组件是`org....

    http远程接口调用-httpClient+跳过SSL证书校验

    HttpClient是Apache提供的一款强大的HTTP客户端库,支持多种HTTP协议版本和功能,包括GET、POST请求、Cookie管理、重定向处理等。在远程接口调用中,HttpClient允许我们构建自定义的请求并获取响应,非常适用于API...

    机票API调用java-DEMO

    1. **使用HttpURLConnection**:这是Java标准库自带的方法,适用于基础的HTTP请求。你可以创建一个URL对象,然后通过openConnection()方法获取HttpURLConnection实例,设置请求方法和头部信息,最后读取响应数据。...

    java自动登录网页

    1. **使用HttpURLConnection**:Java标准库自带的HttpURLConnection可以用来发送GET和POST请求。对于自动登录,我们需要发送POST请求,携带用户名和密码。例如: ```java URL url = new URL(...

    Java-Web-crawler-.zip_JAVA web 爬虫_crawler_java web crawler_java

    3. **网络请求库**:Java有许多库用于发送HTTP请求,如`HttpURLConnection`(Java自带)、Apache HttpClient和OkHttp。这些库提供了发送GET、POST等请求的方法,以及处理响应的功能。 4. **HTML解析**:爬虫抓取到...

    Java迷你青春购物系统

    这些API遵循统一的URI结构,使用HTTP动词(GET、POST、PUT、DELETE)来表示对资源的操作。 5. **安全机制**:对于任何购物系统来说,安全性都是至关重要的。Java迷你青春购物系统可能采用了Spring Security或者...

    2016 Java 基础 面试题

    **POST 和 GET 区别** - **GET**:主要用于获取数据,数据会被附加在URL后面,安全性较低,不适合传递敏感信息;GET请求长度有限制。 - **POST**:主要用于发送数据,数据放在HTTP消息的正文中,没有数据量限制,...

    帆软V9getshell1

    4. **利用Tomcat自带的JSP文件**:由于帆软报表系统通常部署在Apache Tomcat服务器上,攻击者可以利用Tomcat默认存在的JSP文件(例如`/tomcat-7.0.96/webapps/ROOT/index.jsp`)作为切入点,通过覆盖这些文件来植入...

    android java 客户端和服务器的数据交互

    - POST:用于提交数据,通常用于创建新资源,数据在请求体中。 - PUT:用于更新已有资源。 - DELETE:用于删除资源。 3. 实现方式: - Android SDK自带的HttpURLConnection:基础网络请求库,但使用较为繁琐,...

    java http 测试小工具

    java做的http测试小工具,支持post、put、get方法发送数据,自带base64编码以及解码,支持返回内容下载或base64解码保存为文件,支持base64编码类型选择,http请求编码类型选择以及超时时间设置 该软件必须在 64位...

    JAVA的WebService支持讲解

    它支持各种HTTP方法(GET, POST, PUT, DELETE等),并且被广泛应用于开发轻量级Web服务。JAX-RS提供了一套注解,使开发者能够以声明性的方式将资源类映射到HTTP请求和响应。JAX-RS规范的API位于javax.ws.rs.*包中,...

    java 实现博客的增删改查等功能

    这些API应遵循HTTP协议,如GET用于获取数据,POST用于创建新资源,PUT用于更新资源,DELETE用于删除资源。 6. **模板引擎**:在处理视图时,可以使用模板引擎如Thymeleaf或FreeMarker,它们允许将动态数据嵌入到...

    HttpUtils 请求工具类

    自己写的基于Java自带URL请求 处理get,post 不明白的,里面直接运行可以跑,

    android http通信demo

    android 当中涉及到网络编程的部分经常会用到http通信,同时android也为我么您...前面提到的HttpUrlConnection接口是java当中的通信接口,而HttpClient则是java当中自带的通信接口。这个demo就实现了这四种通信方式。

Global site tag (gtag.js) - Google Analytics