Files
nuttyreading-java/src/main/java/com/peanut/common/utils/ConnUtil.java
2023-09-19 18:24:19 +08:00

93 lines
2.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.peanut.common.utils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URLEncoder;
public class ConnUtil {
/**
* UrlEncode UTF-8 编码
*
* @param str
* 原始字符串
* @return
*/
public static String urlEncode(String str) {
String result = null;
try {
result = URLEncoder.encode(str, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
/**
* 从HttpURLConnection 获取返回的字符串
*
* @param conn
* @return
* @throws IOException
* @throws DemoException
*/
public static String getResponseString(HttpURLConnection conn) throws IOException, DemoException {
return new String(getResponseBytes(conn));
}
/**
* 从HttpURLConnection 获取返回的bytes 注意 HttpURLConnection自身问题
* 400类错误会直接抛出异常。不能获取conn.getInputStream();
*
* @param conn
* @return
* @throws IOException
* http请求错误
* @throws DemoException
* http 的状态码不是 200
*/
public static byte[] getResponseBytes(HttpURLConnection conn) throws IOException, DemoException {
int responseCode = conn.getResponseCode();
if (responseCode != 200) {
System.err.println("http 请求返回的状态码错误期望200 当前是 " + responseCode);
if (responseCode == 401) {
System.err.println("可能是appkey appSecret 填错");
}
throw new DemoException("http response code is" + responseCode);
}
InputStream inputStream = conn.getInputStream();
byte[] result = getInputStreamContent(inputStream);
return result;
}
/**
* 将InputStream内的内容全部读取作为bytes返回
*
* @param is
* @return
* @throws IOException
* @see InputStream.read()
*/
public static byte[] getInputStreamContent(InputStream is) throws IOException {
byte[] b = new byte[1024];
// 定义一个输出流存储接收到的数据
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
// 开始接收数据
int len = 0;
while (true) {
len = is.read(b);
if (len == -1) {
// 数据读完
break;
}
byteArrayOutputStream.write(b, 0, len);
}
return byteArrayOutputStream.toByteArray();
}
}