때때로 일부 요청으로 제출된 데이터는 공통 매개변수 이름이 아닙니다. 매개변수 값 매핑 관계의 키-값 쌍입니다. 예를 들어 WeChat 공개 플랫폼 서버에서 개발자가 지정한 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"];
추가 설명:
enctype 속성의 html은 양식 데이터를 서버로 보내기 전에 인코딩하는 방법을 지정합니다. 기본 기본값은 "application/x-www-form-urlencoded"입니다.
application/x-www-form-urlencoded는 전송된 데이터를 키-값 쌍 형식으로 인코딩합니다. 백엔드는 request.getParameter()를 통해
text/plain을 직접 얻을 수 있습니다. 데이터는 컨트롤이나 서식 지정 문자 없이 일반 텍스트로 인코딩됩니다.
multipart/form-data의 경우, 전송되는 데이터는 멀티미디어 전송 프로토콜을 사용해야 합니다. 멀티미디어는 대용량의 데이터를 전송하기 때문에 업로드된 파일은 반드시 포스트 방식으로 전송되어야 한다고 규정되어 있습니다.
파일을 업로드할 때 사용되는 인코딩 유형은 텍스트 데이터를 보낼 수 있고 바이너리 데이터 업로드도 지원하는 "multipart/form-data"여야 합니다.