ACTIVE SERVER PAGE > Server.CreateObject("Msxml2.ServerXMLHTTP.3.0") - 외부 사이트 불러오기
등록일 : 2017-07-04 12:40
조회수 : 93,079
아래 소스트 서버 XML 객체 Msxml2.ServerXMLHTTP.3.0 를 이용하여 네이버 메인화면을 불러와 출력해 보는 예제입니다.
session.CodePage = "65001"
Response.CharSet = "utf-8"
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
오류 처리는 Send 메쏘드를 호출하기 전에 On Error Resume Next를 적어주고 오류발생여부를 체크하면 된다.
On Error Resume Next
sUrl = "http://www.naver.com"
set xml = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xml.Send "subject=test&contents=message+body"
If Err Then
Response.Write "Error:" & xml.ParseError.URL
xml.ParseError.Reason
Else
Response.Write xml.ResponseText
End If
Set oHttp = Nothing
무언가를 보냈으면 받는게 있을수도 있습니다. 받는건 스트링, 바이너리, xml등이 있습니다.
그러므로 호출자측 코드는 마지막으로 이렇게 끝납니다.
response.write xml.responseText
response.binarywrite xml.responsebody
response.write xml.responseXml.xml
한글페이지를 불러올때는 바이너리로 열어야 글자가 안깨집니다.
xml.open "get", "http:// 한글페이지주소/page.asp", false
xml.send
response.binaryWrite xml.responseBody
아래는 예제 소스 입니다.
url = "http://entersoft.kr/test.asp"
tout = 3 * 2000 '' 타임아웃 6초
Set xmlhttp = server.createObject("Msxml2.ServerXMLHTTP.3.0")
with xmlhttp
.setTimeouts tout, tout, tout, tout 'resolve, connect, send, receive
.open "POST", url, false
.send()
End with
' ADO의 스트림 객체로 처리하기
' [이유] responseText 프라퍼티는 리모트의 응답을 무조건 유니코드로 간주하고 디코딩하므로
' 유니코드로 인코딩되지 않은 것들은 모두 글자가 깨짐
' 따라서 이러한 경우에는 responseText를 직접 사용할 수가 없기 때문에
' 리모트의 응답을 디코딩되지 않은 형태로 받아(responseBody 프라퍼티를 사용하면 됨)
' 적절한 인코딩으로 변환한 뒤에 사용하기 위해 ADO의 스트림 객체로 처리함
Set adoStream = CreateObject("ADODB.Stream")
adoStream.Open
adoStream.Position = 0 ' 스트림 객체의 타입을 변경하기 위해선 먼저 스트림의 현재 포지션을 처음으로 지정해야만 됨.
adoStream.Type = 1 ' 먼저 스트림 객체의 타입을 바이너리 타입으로 지정
adoStream.Write xmlhttp.responseBody
adoStream.Position = 0 ' 다시 스트림 객체의 타입을 변경하기 위해 현재 포지션을 처음으로 지정
adoStream.Type = 2 ' 이번에는 스트림 객체의 타입을 텍스트 타입으로 지정
adoStream.Charset = "euc-kr" ' 원하는 인코딩 이름을 지정
resultStr = adoStream.ReadText
adoStream.Close
Set adoStream = Nothing
Set xmlhhtp = Nothing
Response.Write resultStr
Response.End