HttpURLConnection 完美模拟HTTP请求 GET POST 及 COOKIE 传送

参数说明:

urlStr 为访问的地址,此地址不包含任何参数

params:为要传递的参数,格式为“参数名1=参数值1&参数名2=参数值2”,每个参数使用“&”隔开

isGet:boolean类型,使用GET方式还是使用POST方式,false为POST方式,true为GET方式

JSESSIONID:String 为要返回的JSESSIONID 凭证,附带Cookie传递回服务器


本人使用的服务器回传的数据都是使用GZIP压缩的,所以使用GZIPInputStream输入流进行返回数据的解封装和读取打印。如果回传数据未进行压缩,则直接使用InputStream进行读取即可。

以下是源码,若发现错误,欢迎指正!

public static void executeRquest(String urlStr,String params, boolean isGet,String JSESSIONID) throws Exception{
		urlStr += isGet?(params!=null?("?"+params):""):"";
		URL url = new URL(urlStr);
		HttpURLConnection conn = (HttpURLConnection)url.openConnection();
		conn.setDoInput(true);
		conn.setDoOutput(true);
		conn.setRequestMethod(isGet?"GET":"POST");
		
		conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		conn.setRequestProperty("Charset", "UTF-8");
		
		if(JSESSIONID != null &&  !"".equals(JSESSIONID)){
			conn.setRequestProperty("Cookie", "JSESSIONID="+JSESSIONID);
		}
		conn.connect();
		if(!isGet){
			BufferedWriter out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
			out.write(params);
			out.flush();
			out.close();
		}
		//接受请求返回的数据
		GZIPInputStream gzipIn = new GZIPInputStream(conn.getInputStream());
		StringBuilder content = new StringBuilder();
		int count = gzipIn.available();
		while(count == 0){
			count  = gzipIn.available();
		}
		byte[] bt = new byte[128];
		
		while(gzipIn.read(bt) != -1){
			content.append(new String(bt,"UTF-8")+"\n");
			bt = new byte[1024];
		}
		
		String mp = conn.getHeaderField("Set-Cookie");
		System.out.println("**JSESSIONID*********************");
		System.out.println(mp);
		System.out.println("*********************************");
		//in.close();
		gzipIn.close();
		System.out.println("--------------------content begin-------------------------");
		System.out.println(content);
		System.out.println("--------------------content end-------------------------");
		conn.disconnect();
	}


你可能感兴趣的:(java-web)