안규 공부방

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
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.