擷取 post 請求的原生資料

來源:互聯網
上載者:User
有時,有些請求提交的資料不是常見的 參數名:參數值 這種映射關係的索引值對,如公眾平台伺服器向開發人員的指定URL提交的資料,就是 xml 字串,這時,無法通過java的request.getParameter("參數名")來取得,也無法通過php的$_POST['參數名']來取得,針對這種資料,解決辦法如下:

  request.setCharacterEncoding("utf-8");StringBuilder buffer = new StringBuilder();java.io.BufferedReader reader=null;try{/*** getReader() * Retrieves the body of the request as character data using a BufferedReader* getInputStream() * Retrieves the body of the request as binary data using a ServletInputStream.*/reader = request.getReader();String line=null;while((line = reader.readLine())!=null){buffer.append(line);       }}catch(java.io.IOException e){e.printStackTrace();}finally{if(null!=reader){try {reader.close();} catch (java.io.IOException e) {e.printStackTrace();}}}String res = buffer.toString();System.out.print(res);

補充說明: getReader()與getInputStream()一次請求過來,只能調用一次,並且二者不可同時調用。

Php代碼

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

補充說明:

html from enctype 屬性規定在將表單資料發送到伺服器之前如何對其進行編碼,預設的預設值是“application/x-www-form-urlencoded”。

application/x-www-form-urlencoded,會將傳輸的資料編碼成索引值對的形式,後端可以直接通過request.getParameter()擷取

text/plain,資料以純文字形式進行編碼,其中不含任何控制項或格式字元。

multipart/form-data,傳輸的資料要用到多媒體傳輸協議,由於多媒體傳輸的都是大量的資料,所以規定上傳檔案必須是post方法。
在檔案上傳時,所使用的編碼類別型應當是“multipart/form-data”,它既可以發送文本資料,也支援位元據上傳。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.