xml 통신(수신) - Web 언어별xml 통신(수신) - Web 언어별
$HTTP_RAW_POST_DATA
POST로 보낸 데이타를 받는 구문
일반적으로 변수는 name과 valule의 쌍으로 이루어지나 그렇지 않을 경우가 있다.
요즘 ajax 와 xml을 연동함에 있었어 이런 경우가 종종보여진다.
이럴경우 사용하는 것이 $HTTP_RAW_POST_DATA 다.
이때 php.ini 환경설정은
always_populate_raw_post_data On
이 되어 있어야 한다.
PHP 코드
<?php
$method = $_GET['method'];
$name = $_GET['name'];
if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] ))
{
// get bytearray
$pdf = $GLOBALS["HTTP_RAW_POST_DATA"];
// add headers for download dialog-box
header('Content-Type: application/pdf');
header('Content-Length: '.strlen($pdf));
header('Content-disposition:'.$method.'; filename="'.$name.'"');
echo $pdf;
}
else echo 'An error occured.';
?>
ASP 코드
<%
Dim FileSavePath ,ext, filename
FileSavePath = Server.MapPath(".")
ext = Mid(attFile, InstrRev(attFile, ".")+1) '화일 확장자 추출
filename = "sample."& ext
intByteCnt = Request.TotalBytes '데이터 블록의 총바이트 값이 들어감
strData = Request.BinaryRead(intByteCnt) '바이너리 스트림 데이타
If intByteCnt > 1 Then
'----------------------------------------------
' Binary 데이타를받아서 server에 화일로 저장시킴.
'----------------------------------------------
Set objStream = CreateObject("ADODB.Stream")
objStream.Open()
objStream.Type = 1 ' 1: binary 타입을 의미한다.
objStream.Write strData
objStream.SaveToFile FileSavePath &"\"& filename, 2 '2:덮어쓰기 허용
Set objStream = nothing
End if
%>
Java 코드
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class CreatePDFServlet extends HttpServlet
{
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
doGet(req, resp);
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
int i = 0;
int k = 0;
int maxLength = req.getContentLength();
byte[] bytes = new byte[maxLength];
String method = req.getParameter("method");
String name = req.getParameter("name");
ServletInputStream si = req.getInputStream();
while (true)
{
k = si.read(bytes,i,maxLength);
i += k;
if (k <= 0)
break;
}
if (bytes != null)
{
ServletOutputStream stream = resp.getOutputStream();
resp.setContentType("application/pdf");
resp.setContentLength(bytes.length);
resp.setHeader("Content-Disposition",method + ";filename=" + name);
stream.write(bytes);
stream.flush();
stream.close();
}
else
{
resp.setContentType("text");
resp.getWriter().write("bytes is null");
}
}
}