Java Post 数据请求和接收
? ? ? 這兩天在做http服務端請求操作,客戶端post數據到服務端后,服務端通過request.getParameter()進行請求,無法讀取到數據,搜索了一下發現是因為設置為text/plain模式才導致讀取不到數據
?
urlConn.setRequestProperty("Content-Type","text/plain; charset=utf-8");????? 若設置為以下方式,則通過request.getParameter()可以讀取到數據
?
?
urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");?
- ?enctype的三種編碼
?
???? ?? form表單中enctype屬性可以用來控制對表單數據的發送前的如何進行編碼,即在發送到服務器之前,所有字符都會進行編碼(空格轉換為 "+" 加號,特殊符號轉換為 ASCII HEX 值)。默認是application/x-www-form-urlencoded。
??????? multipart/form-data用于發送二進制的文件,其他兩種類型不能用于發送文件
????? text/plain用于發送純文本內容,不對特殊字符進行編碼,一般用于email之類的。
??????? application/x-www-form-urlencoded和text/plain的區別簡單講就是一個發送html內容,一個發送純文本內容
- 當定義enctype為application/x-www-form-urlencoded時,使用以下方式接收數據
?
request.getParameter(參數名);?
- 當定義enctype為text/plain時,使用以下方式接收數據
?
// 接收請求數據BufferedReader reader = request.getReader();char[] buf = new char[512];int len = 0;StringBuffer contentBuffer = new StringBuffer();while ((len = reader.read(buf)) != -1) {contentBuffer.append(buf, 0, len);}String content = contentBuffer.toString();if(content == null){content = "";}- ? post 與get
?????????????? post和get可以通過鍵值對的方式進行參數傳輸,服務端通過request.getparameter方式進行請求獲取數據。
- 客戶端post數據到服務端,服務端接收處理
?
public class UrlConnection {?? ?@SuppressWarnings("finally")public static boolean response(String url,String content) {String line ?? ??? ?= "";String message?? ??? ?= "";String returnData?? = "";boolean postState ?? ?= false;BufferedReader bufferedReader = null;try {URL urlObject = new URL(url);HttpURLConnection urlConn = (HttpURLConnection) urlObject.openConnection();urlConn.setDoOutput(true);/*設定禁用緩存*/urlConn.setRequestProperty("Pragma:", "no-cache");???? ?urlConn.setRequestProperty("Cache-Control", "no-cache");/*維持長連接*/urlConn.setRequestProperty("Connection", "Keep-Alive"); ?/*設置字符集*/urlConn.setRequestProperty("Charset", "UTF-8");/*設定輸出格式為json*/urlConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");/*設置使用POST的方式發送*/urlConn.setRequestMethod("POST");??????????? ?/*設置不使用緩存*/urlConn.setUseCaches(false);/*設置容許輸出*/urlConn.setDoOutput(true); ?/*設置容許輸入*/urlConn.setDoInput(true);???????????? ?urlConn.connect();OutputStreamWriter outStreamWriter = new OutputStreamWriter(urlConn.getOutputStream(),"UTF-8"); outStreamWriter.write(content);outStreamWriter.flush();outStreamWriter.close();/*若post失敗*/if((urlConn.getResponseCode() != 200)){returnData = "{\"jsonStrStatus\":0,\"processResults\":[]}";message = "發送POST失敗!"+ "code="+urlConn.getResponseCode() + "," + "失敗消息:"+ urlConn.getResponseMessage();// 定義BufferedReader輸入流來讀取URL的響應InputStream errorStream = urlConn.getErrorStream(); if(errorStream != null){InputStreamReader inputStreamReader = new InputStreamReader(errorStream,"utf-8");bufferedReader = new BufferedReader(inputStreamReader); ?while ((line = bufferedReader.readLine()) != null) { ?message += line;?? ?}??????? ?inputStreamReader.close();}errorStream.close();System.out.println("發送失敗!錯誤信息為:"+message);???????????? ??? ?}else{/*發送成功返回發送成功狀態*/postState = true;// 定義BufferedReader輸入流來讀取URL的響應InputStream inputStream = urlConn.getInputStream(); ?InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf-8");bufferedReader = new BufferedReader(inputStreamReader); ?while ((line = bufferedReader.readLine()) != null) { ?message += line; ?}?????? ?returnData = message;inputStream.close();inputStreamReader.close();System.out.println("發送POST成功!返回內容為:" + message);??????????? ??? ?? ??? ?}} catch (Exception e) {e.printStackTrace();}finally{try {? ?if (bufferedReader != null) { ?bufferedReader.close(); ?}???????????????? ?} catch (IOException ex) { ?ex.printStackTrace(); ?} ??? ??? ?return postState;}}/*讀取request數據*/public static String getRequestData(HttpServletRequest request) throws IOException{BufferedReader reader = request.getReader();char[] buf = new char[512];int len = 0;StringBuffer contentBuffer = new StringBuffer();while ((len = reader.read(buf)) != -1) {contentBuffer.append(buf, 0, len);}String content = contentBuffer.toString();if(content == null){content = "";}return content;} }?
?
轉載于:https://www.cnblogs.com/wala-wo/p/5119217.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Java Post 数据请求和接收的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 时间复杂度为m+n,的一种模式匹配,适合
- 下一篇: Java POI 导出EXCEL经典实现