HttpURLConnection用法详解
一、简介
HttpURLConnection类是另一种访问HTTP资源的方式。
二、连接步骤
1、通过openConnection方法创建连接对象。
2、设置请求头和请求体
3、使用connect方法于远程对象进行连接
4、远程对象变得可用,其字段和内容变得可访问
三、用法
1、创建连接
// 获取连接的URL
URLurl= newURL("http://localhost:8080/day10-http/ServletDemo1");
// 打开连接
HttpURLConnectionhttp= (HttpURLConnection) url.openConnection();
2、设置请求参数
//提交模式,默认是“GET”
conn.setRequestMethod("POST"); //提交模式
//设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
//http正文内,因此需要设为true,默认情况下是false;
conn.setDoOutput(true);
//设置是否从httpUrlConnection读入,默认情况下是true;
conn.setDoInput(true);
//Post 请求不能使用缓存
conn.setUseCaches(false);
//设定传送的内容类型是可序列化的java对象
//(如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
//conn.setRequestProperty("Content-type","application/x-java-serialized-object");
conn.setRequestProperty("Content-Type","application/json;charset=UTF-8"); //设置请求属性
conn.setRequestProperty("User-Agent","Autoyol_gpsCenter");
//连接,从上述中url.openConnection()至此的配置必须要在connect之前完成,
3、连接
conn.connect();
4、使用输入输出流传递参数
Stringstr= "{\"name\":\"小李\"}";
OutputStream os = conn.getOutputStream();
os.write(str.getBytes());
os.flush();
os.close();
//如果我将此段放在if里面,那么他会爆出不能将输出放在输入之后的问题,将其放在外面就OK了
if(conn.getResponseCode()==200){
InputStreamis= conn.getInputStream();
byte[]buffer= newbyte[1024];
ByteArrayOutputStreambaos= newByteArrayOutputStream();
for(intlen=0;(len= is.read(buffer))>0;){
baos.write(buffer,0, len);
}
StringreturnValue= newString(baos.toByteArray(),"utf-8");
System.out.println(returnValue);
baos.flush();
baos.close();
is.close();
}
servlet
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.getWriter().write("hello");
InputStream is = request.getInputStream();
byte[] buffer = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for(int len =0;(len = is.read(buffer))>0;) {
baos.write(buffer, 0, len);
}
String returnValue = new String(baos.toByteArray(), "utf-8" );
System.out.println(returnValue);
baos.flush();
baos.close();
is.close();