有時,有些請求提交的資料不是常見的 參數名:參數值 這種映射關係的索引值對,如公眾平台伺服器向開發人員的指定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”,它既可以發送文本資料,也支援位元據上傳。