conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
conn.connect();
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(JSON.toJSONString(json));
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
while ((line = in.readLine()) != null) {
result += line;
}
httpUrlConnection.setDoOutput(true);以后就可以使用conn.getOutputStream().write()
httpUrlConnection.setDoInput(true);以后就可以使用conn.getInputStream().read();
get请求用不到conn.getOutputStream(),因为参数直接追加在地址后面,因此默认是false。
post请求(比如:文件上传)需要往服务区传输大量的数据,这些数据是放在http的body里面的,因此需要在建立连接以后,往服务端写数据。因为总是使用conn.getInputStream()获取服务端的响应,因此默认值是true。
报错的可能:
A.请求地址可能会有乱码用这个来处理请求地址:url = new URL(new URI(urlCont.toString()).toASCIIString())
B.读取回传值得时候,或者传输的时候会有乱码的出现:避免的方式用byte来读取
InputStream is = httpURLConnection.getInputStream();
int size = is.available();
byte[] jsonBytes = new byte[size];
is.read(jsonBytes);
1 、 read () 方法,这个方法 从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1 。
2 、 read (byte[] b,int off,int len) 方法, 将输入流中最多 len 个数据字节读入 byte 数组。尝试读取 len 个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数。
3 、 read (byte[] b) 方法, 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。
C.请求的网关,没有把访问的网址加入白名单中,这也是我这次遇到的坑
D.请求的数据过大,这个可以在tomcat的server.xml里面设置,但是要注意tomcat7.0和6.0的大小设置不一样,一个是 maxPostSize="-1" 另一个是 maxPostSize="0"
E.等待时间过长,这里需要把最大时间在设置一下。
F.可以用client来,它相对urlconnect,相对更强大一点。