如何使用java 原生 HttpURLConnection 送出一個 json 格式的 POST
以下是個範例,會將一個json 字串使用POST方式送往 slack 的機器人,值得一提的是json 內容其實是個字串,必須使用writeBytes 將資料送出。
public static void main(String[] arg) {
String QueryStr = "{\"text\":\"I am a bot make by Quanto !!! Hello, BOBt!\"}";
String ret = "";
String urlString = "https://hooks.slack.com/services/T6PQXXXXXXXXX";
String host = "hooks.slack.com";
String url = "services/TXXXXXXXXXXXXXXXXXXXXXXXXX";
ret = httpConnectionPostJSON(urlString, QueryStr);
System.out.println(ret);
}
public static String httpConnectionPostJSON(String apiUrl,String params) {
HttpURLConnection conn = null;
StringBuilder response = new StringBuilder();
try {
URL url = new URL(apiUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Content-Type","application/json; charset=UTF-8");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestMethod("POST");
conn.setConnectTimeout(10000);
conn.setReadTimeout(10000);
conn.setDoInput(true); //允許輸入流,即允許下載
conn.setDoOutput(true); //允許輸出流,即允許上傳
conn.setUseCaches(false); //設置是否使用緩存
OutputStream os = conn.getOutputStream();
DataOutputStream writer = new DataOutputStream(os);
String jsonString = params;
writer.writeBytes(jsonString);
writer.flush();
writer.close();
os.close();
//Get Response
InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
response.append('\r');
}
reader.close();
}catch (Exception ex) {
ex.printStackTrace();
}finally {
if(conn!=null) {
conn.disconnect();
}
}
return response.toString();
}