HttpURLConnection方式get请求的实例以及解决中文传参出现bug的解决方法

       这两天,项目的需要改变了,因此添加了新的功能。在短信这个模块当中,完成后台发送短信请求,实现督促评委完成问卷的功能。在这个模块当中,最令我难受的就是HttpURLConnection的get请求方法了,在这个过程中,尝试了诸多方法,都不行,还好历尽千辛万苦终于解决了这个问题了。以下就会贴出我的项目代码,作为学习记录。

public static String send(String msgContent, String mobile)
			throws Exception {
		// 组建请求
		String nmsg = URLEncoder.encode(msgContent, "UTF-8");
		String straddr = addr + "&phone=" + mobile + "&msg=" + nmsg;
		// String nmsg = new String(msgContent.getBytes(), "ISO-8859-1");
		// String straddr = addr + "&phone=" + mobile + "&msg=" + nmsg;
		// StringBuffer sb = new StringBuffer(straddr);
		// System.out.println("URL:" + sb);
		// 发送请求
		// URL url = new URL(sb.toString());

		// String naddr = URLEncoder.encode(straddr, "UTF-8");
		// String naddr = new String(straddr.getBytes(), "ISO-8859-1");
		URL url = new URL(straddr);
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		connection
				.setRequestProperty("User-Agent",
						"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0");
		connection.setRequestProperty("Content-Type",
				"plain/text; charset=UTF-8");
		connection.setRequestMethod("GET");
		connection.connect();
		BufferedReader in = new BufferedReader(new InputStreamReader(
				url.openStream()));
		// 返回结果
		String inputline = in.readLine();
		in.close();
		connection.disconnect();
		return inputline;
	}

       addr是我请求的url,涉及到公司内部的ip就不方便贴出来了,在这个请求里,其实是提取了出来,作为一个工具类,短信验证码方面也用到了,因此抽取出来写到baseAction中即可。对于HttpURLConnection的知识,还有很多很多,很多时候涉及编码的问题真的是头都大,但是其根源还是可以追踪的。

       这个方法是可以直接的用的,也解决了中文传参的问题。

下面给个模范一点的例子


 
public class TestUrlGet {
	public static void main(String[] args) {
		try {
			//对输入的内容进行编码,防止中文乱码
			String username = URLEncoder.encode("李四", "UTF-8");
			
			//对应GET请求,要把请求信息拼接在url后面
			URL url = new URL("XXXX?username="+username+"&password=123");
		
			//调用url的openConnection()方法,获得连接对象
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			
			//设置HttpURLConnection的属性
			conn.setRequestMethod("GET");
			conn.setReadTimeout(5000);
			conn.setConnectTimeout(5000);
			
			//只是建立一个连接, 并不会发送真正http请求  (可以不调用)
			conn.connect();
			
			//通过响应码来判断是否连接成功
			if (conn.getResponseCode() == 200) {
				//获得服务器返回的字节流
				InputStream is = conn.getInputStream();
				
				//内存输出流,适合数据量比较小的字符串 和 图片
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				byte[] buf = new byte[1024];
				int len = 0;
				while((len = is.read(buf))!=-1){
					baos.write(buf, 0, len);
				}
				//可使用 toByteArray() 和 toString() 获取数据。
				byte[] result = baos.toByteArray();
				System.out.println(new String(result));
				is.close();
				System.out.println("客户端执行完毕!!");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_40295575/article/details/81734965