1.
set xml = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
xml.open "POST", "http://www.naver.com", false
xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xml.send
res = xml.responseText
Set xml = Nothing
response.write res
Set xmlClient = CreateObject("MSXML2.ServerXMLHTTP.4.0")
xmlClient.open "GET", "http://www.naver.com", False
xmlClient.send
' ADO의 스트림 객체로 처리하기
' [이유] responseText 프라퍼티는 리모트의 응답을 무조건 유니코드로 간주하고 디코딩하므로
' 유니코드로 인코딩되지 않은 것들은 모두 글자가 깨짐
' 따라서 이러한 경우에는 responseText를 직접 사용할 수가 없기 때문에
' 리모트의 응답을 디코딩되지 않은 형태로 받아(responseBody 프라퍼티를 사용하면 됨)
' 적절한 인코딩으로 변환한 뒤에 사용하기 위해 ADO의 스트림 객체로 처리함
Set responseStrm = CreateObject("ADODB.Stream")
responseStrm.Open
' 스트림 객체의 타입을 변경하기 위해선 먼저 스트림의 현재 포지션을 처음으로 지정해야만 됨.
responseStrm.Position = 0
' 먼저 스트림 객체의 타입을 바이너리 타입으로 지정
responseStrm.Type = 1
responseStrm.Write xmlClient.responseBody
' 다시 스트림 객체의 타입을 변경하기 위해 현재 포지션을 처음으로 지정
responseStrm.Position = 0
' 이번에는 스트림 객체의 타입을 텍스트 타입으로 지정
responseStrm.Type = 2
' 원하는 인코딩 이름을 지정
responseStrm.Charset = "euc-kr"
resultStr = responseStrm.ReadText
Response.Write resultStr
Response.End
responseStrm.Close
Set responseStrm = Nothing
Set xmlClient = Nothing
4.
XMLHTTP | ||||||||||||||||
1.Method | ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
|
mxsml2.xmlhttp란 무엇인가?
xmlhttp는 원격파일을 부르는 방법입니다. 물론 로컬웹서버에 있는 파일도
가능하고, 같은 도메인 내에서라면 클라이언트영역에서도 사용가능합니다. 이렇게 개체를 참조합니다.
set xh=createobject("msxml2.xmlhttp")
get/post 둘다 사용가능합니다.
xh.open "get", "url", false
xh.open "post", "url", false
url은 비록 로컬서버라 해도 반드시 http로 시작합니다. 이렇게 연결을 연 다음에는 보냅니다.
xh.send something
마지막 something은 생략될수도 있습니다. 예를들어 get방식에서는 보낼게없을겁니다.
그러므로 그냥,
xh.send
무언가를 보냈으면 받는게 있을수도 있습니다. 받는건 스트링, 바이너리, xml등이 있습니다.
그러므로 호출자측 코드는 마지막으로 이렇게 끝납니다.
response.write xh.responseText 'or
response.binarywrite xh.responsebody 'or
response.write xh.responseXml.xml
한편 피호출자(url의 주소페이지)는 xmlhttp가 보내는걸 이렇게 받습니다.
response.write request.querystring(1)
response.write request.form(1)
response.binaryWrite request
xmldoc.load request
각각 get, post, binary, xml을 보냈을 경우입니다. 한편 두번째 post방식은 그동안 설명만으론 안됩니다.
사실은 보낼때, open과 send 사이에 다음 행을 집어넣습니다.
xh.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
담에 보낼때,
xh.send "f1=1&f2=2"
이런식으로 쿼리스트링을 나누는것처럼 폼 변수를 나누어 보냅니다. 받는측에선
request.form(1), request.form(2), 이런식으로 나누어 받을겁니다.
한편 get방식은 오픈할때 그냥 url에 쿼리문자열을 넣어서 보냅니다.
xh.open "get", "http:// url/page.asp?a=1&b=2", false
그리고 send는 그냥,
xh.send
한글페이지를 불러올때는 바이너리로 열어야 글자가 안깨집니다.
xh.open "get", "http:// 한글페이지주소/page.asp", false
xh.send
response.binaryWrite xh.responseBody
이외에 xmlhttp는 바이너리나 xml dom 개체를 보내는데도 편리하게 사용할수 있습니다.
xmlhttp는 윈도우의 wininet.dll이라는 개체를 사용합니다. 단점은 멀티스레드가 안된다는겁니다.
그러므로 요즘은 serverXmlHttp가 권장됩니다.
사용법은 같습니다. 그냥 시작할때,
set xh=createobject("msxml2.serverXmlhttp")
server만 앞에 붙이면 됩니다. 한편 최신xml버전을 깔아두고, 버전까지 명시해서 사용하는것이 좋습니다.
set xh=createobject("msxml2.xmlhttp.4.0")
set xh=createobject("msxml2.serverXmlhttp.4.0")