티스토리 뷰

1. Msxml2.ServerXMLHTTP VS Microsoft.XMLHTTP

 

ASP페이지에서 쓸때는 ServerXMLHTTP, IE의 VBScript에서 쓸때는 XMLHTTP 를 쓴다.

무조건 그렇게 하는게 좋다.  왜 그래야하는지는 MSDN에서 찾아보시라. 잘 나와있다. ㅎㅎㅎ

 

2. IE상의 VBScript 에서 XMLHTTP 를 쓸 때 Permission denied 가 나오는 경우

.open 메서드를 실행했을 때 permission denied 나 나올때가 있다.

이것은 IE의 도구 > 옵션 > 보안 > 도메인간 데이터 소스 탐색을 허용해야한다.

그런데 유저가 엄청 많을때는 이것을 사용하기가 구린 상황이 있을 수 있으므로

어거지로 asp 페이지안에서 ServerXMLHTTP 를 사용하는 식으로 꽁수를...-_-;;;;;;;;;;;;

 

3. XMLHTTP GET으로 파일 읽어오기

function GetFileFrom(sURL, sSavepath)

    on error resume next

    dim oHTTP, oStream

    Const adTypeBinary = 1

    Const adSaveCreateOverWrite = 2

    set oHTTP = Server.CreateObject("Microsoft.XMLHTTP")

    oHTTP.open "GET", sURL, False

    oHTTP.send

    set oStream = Server.Createobject("ADODB.Stream")

    oStream.type = adTypeBinary

    oStream.open

    oStream.write oHTTP.responseBody

    oStream.savetofile sSavepath, adSaveCreateOverWrite

    set oStream = nothing

    set oHTTP = nothing

    if err.number <> 0 then GetFileFrom = false

    else                     GetFileFrom = true

    end if

end function

 

4. XMLHTTP POST로 form 제출하기

 

sType = Request.QueryString("TYPE")

sUserID = Request.QueryString("USERID")

set oXmlhttp = Server.CreateObject("Msxml2.ServerXMLHTTP")

oXmlhttp.open "POST", "http://somewhere.somewhere/upload_temp/somephppage.php", false

oXmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

oXmlhttp.send "USERID=" + sUserID

sResponse = oXmlhttp.responseText

' somephppage.php 에서 출력하는 내용이 responseText에 들어간다.

' 이 파일안에서는 특정조건을 체크해서 echo "1" 또는 echo "0" 만 한다.

' 이것을 응용하면, 다른 플랫폼의 php 나 cgi 를 웹을 통해서 부르는 흉내

' 를 낼 수 있다. 초간단 웹서비스인가? ㅋㅋㅋㅋㅋㅋ

' 그런데 sResponse 에는 끝에 괴상한 문자가 하나 들어간다. php 에서는

' 분명히 글자 하나만 출력했는데도. 실제로 len(sResponse)를 해보면

' 2가 나온다. 그래서 아래처럼 지저분한 코드가...-_-;;;;;;;;;;;;

if Left(cstr(sResponse),1) = "1" then           ' 유저가 있음..

    Server.Execute "ImgUpload_SaveToGDisk.asp"  'response 객체의 모든 내용이 같이 넘어간다.

                                                'asp 3.0 에 추가된 메서드이므로 책찾아보시오.ㅋㅋㅋ

else

    ' 가입안내 페이지로 간다...

    Response.Write "GDisk 사용자가 아닙니다. GDisk 사용신청을 해주십시오. (UI는 나중에..)"

end if

' 여기서 nothing 을 해야하는 이유... sResponse 가 oXmlhttp의 responseText

' 를 참조하고 있다. VBScript 에서는 기본적으로 by reference 이므로 sResponse

' 의 사용이 끝나기 전에 oXmlhttp를 nothing 해버리면 sResponse 가 유령이 되서리,

' if 절에서 runtime error를 내버린다. 그러니 왠만하면 CreateObject 한거나

' new 한것들을 함수 마지막에 nothing 하도록 하자.

set oXmlhttp = nothing 

 

5. XMLHTTP PUT으로 file upload 하기

 

sUpload_temp = "http://somewhere.somewhere/upload_temp/"

set oXmlhttp = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")

' SXH_SXH_OPTION_URL_CODEPAGE 를 CP_ANSI 로 바꾼다.

' ServerXMLHTTP의 원래 URL코드페이지는 CP_UTF8 인데 이렇게 보내면 apache의 mod_dav에서 파일

' 명을 제대로 저장하지 못하고, 연이어서 php에서 file copy 가 실패한다.

' CP_UTF8 은 65001 이고 CP_ANSI는 0 이다.

' Visual C++의 winnls.h 를 찾아보면 나와있다. MSDN에 잘 메서드 설명 참조하시오~~~

' ASP 코딩하다 별걸 다 찾는구나 젠장-_-;;;;;;;;;;;;

' Microsoft.XMLHTTP 같은 옛날 버전의 XMLHTTP 는 이런거 해줄필요없다. 다만 ASP페이지안에서 쓰기에 불안할 뿐...

oXmlhttp.setOption 0, 0

' SXH_OPTION_ESCAPE_PERCENT_IN_URL 원래 false를 true로 공백을 escape char로 안바꿈.

oXmlhttp.setOption 1, true         

' 이 부분!!!!!!!!!!!!!!!!!!!!!!

oXmlhttp.Open "PUT", sUpload_temp + sFileName, false

oXmlhttp.Send readBinaryFile(sRsltFile)

if err.number <> 0 then

    Response.Write ClientMsgBox("[ERROR] " + oXmlhttp.statusText)

else

    ' php 페이지를 호출해서 적절한 디렉토리로 옮긴다   

    Response.Redirect sUpload_temp + "MoveFileToUsersGDisk.php?filename=" + sFileName + "&user=" + sUserID

end if

set oXmlhttp = nothing 

function readBinaryFile(sPath)

    Dim objStream

    Set objStream = Server.CreateObject("ADODB.Stream")

    objStream.Type = 1 ' adTypeBinary

    objStream.Open

    objStream.LoadFromFile sPath

    readBinaryFile = objStream.Read

    objStream.Close

    Set objStream = Nothing

end function

 

이 방법을 쓰려면 웹서버쪽에 PUT 방식이 허용되어 있어야 한다. IIS는 기본적으로 되고(IIS가 쓰기

권한을 가진 디렉토리에 PUT 하면 된다) apache는 기본적으로 안되는데, apache 2.0 이상에 같이

포함되어 배포되는 mod_dav 를 사용하면 된다. mod_dav 를 사용하는 법은 www.apache.org 에 가서

mod_dav 를 넣고 찾아보세요~~~~~

 

[출처] http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=57&MAEULNo=22&no=1801

 

--------------------------------------------------

 

Microsoft.XMLHTTP

 

<%
Session.Codepage=65001
Response.ContentType="text/HTML"
Response.Charset="utf-8"
Function muzcast_pcode_chk(pcode,id,site_code)
Dim check_url
check_url = "http://url/http_test.asp?pcode=" & pcode & "&id=" & id & "&site_code=" & site_code
Set xml = server.CreateObject("Microsoft.XMLHTTP") '개체생성
xml.open "POST", "" & check_url & "", false '원하는 url불러오기
xml.send ""
strStatus = xml.Status '실행상태 받아오기
return_value = xml.responseText '실제 받고자하는 데이터
response.write return_value
set xml = nothing '개체 소멸
End Function
pcode_chk permission_code,id,site_code
%>

--------------------------------------------------

 

Microsoft.XMLHTTP

 

set xml = Server.CreateObject("Microsoft.XMLHTTP")
xml.open "POST", URL, false
xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xml.send
Result = xml.responseText
Response.write Result
Set xml = Nothing

---------------------------------------------------

 

ServerXMLHTTP.4.0

 

Set obj_xml = CreateObject("MSXML2.ServerXMLHTTP.4.0")

szUrl = "http://www.naver.com"
obj_xml.Open "POST",szUrl, false

obj_xml.setRequestHeader "content-type","application/x-www-form-urlencoded; charset=euc-kr"
obj_xml.Send objDom.xml

(ADO.Stream) = obj_xml.responseBody

response.binaryWrite  (ADO.Stream)

 

(ADO.Stream) 은 직접 만들것…

 

---------------------------------------------------

'웹프로그래밍 > ASP Classic' 카테고리의 다른 글

DB 데이터 엑셀 HTML 변환 파일 오픈시 한글 인코딩 깨질때  (0) 2010.06.14
ASP SHA1  (0) 2010.06.01
[ASP,VBScript] 한글 자르기  (0) 2010.04.06
Classic ASP Tagged Posts (Link)  (0) 2010.04.02
[ASP] Crazy Beaver  (0) 2010.04.02
댓글