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