日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java Post 数据请求和接收

發(fā)布時間:2025/3/15 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Post 数据请求和接收 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? 這兩天在做http服務(wù)端請求操作,客戶端post數(shù)據(jù)到服務(wù)端后,服務(wù)端通過request.getParameter()進(jìn)行請求,無法讀取到數(shù)據(jù),搜索了一下發(fā)現(xiàn)是因為設(shè)置為text/plain模式才導(dǎo)致讀取不到數(shù)據(jù)

?

urlConn.setRequestProperty("Content-Type","text/plain; charset=utf-8");

????? 若設(shè)置為以下方式,則通過request.getParameter()可以讀取到數(shù)據(jù)

?

?

urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

?

  • ?enctype的三種編碼

?

???? ?? form表單中enctype屬性可以用來控制對表單數(shù)據(jù)的發(fā)送前的如何進(jìn)行編碼,即在發(fā)送到服務(wù)器之前,所有字符都會進(jìn)行編碼(空格轉(zhuǎn)換為 "+" 加號,特殊符號轉(zhuǎn)換為 ASCII HEX 值)。默認(rèn)是application/x-www-form-urlencoded。

??????? multipart/form-data用于發(fā)送二進(jìn)制的文件,其他兩種類型不能用于發(fā)送文件

????? text/plain用于發(fā)送純文本內(nèi)容,不對特殊字符進(jìn)行編碼,一般用于email之類的。

??????? application/x-www-form-urlencodedtext/plain的區(qū)別簡單講就是一個發(fā)送html內(nèi)容,一個發(fā)送純文本內(nèi)容

  • application/x-www-form-urlencoded?? ?在發(fā)送前編碼所有字符(默認(rèn))
  • multipart/form-data?? ?不對字符編碼。在使用包含文件上傳控件的表單時,必須使用該值。
  • text/plain??? 空格轉(zhuǎn)換為 "+" 加號,但不對特殊字符編碼。
    • 當(dāng)定義enctype為application/x-www-form-urlencoded時,使用以下方式接收數(shù)據(jù)

    ?

    request.getParameter(參數(shù)名);

    ?

    • 當(dāng)定義enctype為text/plain時,使用以下方式接收數(shù)據(jù)

    ?

    // 接收請求數(shù)據(jù)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可以通過鍵值對的方式進(jìn)行參數(shù)傳輸,服務(wù)端通過request.getparameter方式進(jìn)行請求獲取數(shù)據(jù)。

    • 客戶端post數(shù)據(jù)到服務(wù)端,服務(wù)端接收處理

    ?

    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);/*設(shè)定禁用緩存*/urlConn.setRequestProperty("Pragma:", "no-cache");???? ?urlConn.setRequestProperty("Cache-Control", "no-cache");/*維持長連接*/urlConn.setRequestProperty("Connection", "Keep-Alive"); ?/*設(shè)置字符集*/urlConn.setRequestProperty("Charset", "UTF-8");/*設(shè)定輸出格式為json*/urlConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");/*設(shè)置使用POST的方式發(fā)送*/urlConn.setRequestMethod("POST");??????????? ?/*設(shè)置不使用緩存*/urlConn.setUseCaches(false);/*設(shè)置容許輸出*/urlConn.setDoOutput(true); ?/*設(shè)置容許輸入*/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 = "發(fā)送POST失敗!"+ "code="+urlConn.getResponseCode() + "," + "失敗消息:"+ urlConn.getResponseMessage();// 定義BufferedReader輸入流來讀取URL的響應(yīng)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("發(fā)送失敗!錯誤信息為:"+message);???????????? ??? ?}else{/*發(fā)送成功返回發(fā)送成功狀態(tài)*/postState = true;// 定義BufferedReader輸入流來讀取URL的響應(yīng)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("發(fā)送POST成功!返回內(nèi)容為:" + message);??????????? ??? ?? ??? ?}} catch (Exception e) {e.printStackTrace();}finally{try {? ?if (bufferedReader != null) { ?bufferedReader.close(); ?}???????????????? ?} catch (IOException ex) { ?ex.printStackTrace(); ?} ??? ??? ?return postState;}}/*讀取request數(shù)據(jù)*/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;} }


    ?



    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/wala-wo/p/5119217.html

    與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的Java Post 数据请求和接收的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。