java http post json

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class Copy_2_of_PostDemo {

final static String url = "";
final static String params = "{\"id\":\"12345\"}";

/**
* 發送HttpPost請求
*
* @param strURL
* 服務地址
* @param params
* json字符串,例如: "{ \"id\":\"12345\" }" ;其中屬性名必須帶雙引號<br/>
* @return 成功:返回json字符串<br/>
*/
public static String post(String strURL, String params) {
System.out.println(strURL);
System.out.println(params);
try {
URL url = new URL(strURL);// 創建連接
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestMethod("POST"); // 設置請求方式
connection.setRequestProperty("Accept", "application/json"); // 設置接收數據的格式
connection.setRequestProperty("Content-Type", "application/json"); // 設置發送數據的格式
connection.connect();
OutputStreamWriter out = new OutputStreamWriter(
connection.getOutputStream(), "UTF-8"); // utf-8編碼
out.append(params);
out.flush();
out.close();
// 讀取響應
int length = (int) connection.getContentLength();// 獲取長度
InputStream is = connection.getInputStream();
if (length != -1) {
byte[] data = new byte[length];
byte[] temp = new byte[512];
int readLen = 0;
int destPos = 0;
while ((readLen = is.read(temp)) > 0) {
System.arraycopy(temp, 0, data, destPos, readLen);
destPos += readLen;
}
String result = new String(data, "UTF-8"); // utf-8編碼
System.out.println(result);
return result;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "error"; // 自定義錯誤信息
}

public static void main(String[] args) {
post(url, params);
}

}


備註

httpUrlConnection.setDoOutput(true);以後就可以使用conn.getOutputStream().write()
httpUrlConnection.setDoInput(true);以後就可以使用conn.getInputStream().read();

get請求用不到conn.getOutputStream(),因爲參數直接追加在地址後面,因此默認是false。
post請求(比如:文件上傳)需要往服務區傳輸大量的數據,這些數據是放在http的body裏面的,因此需要在建立連接以後,往服務端寫數據。

因爲總是使用conn.getInputStream()獲取服務端的響應,因此默認值是true。java http post json
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章