2009-06-01 6 views
4

저는 지불 엔진에 XML을 게시해야하는 고전적인 ASP 응용 프로그램을 가지고 있으며 참조 코드는 System.Net.HttpWebRequest 객체 (asp.net)를 사용합니다. XML을 게시하는 데 사용할 수있는 Classic ASP에 해당하는 항목이 있습니까?고전 ASP에서 System.Net.HttpWebRequest?

답변

6

Heres ASP에서 HTTP 요청을하기 위해 사용하는 약간의 도우미 함수. 그것의 JScript에 있지만 적어도 몇 가지 불쾌한 잡았다 우리는 몇 년 동안 철분했다의 포인터를 생각을해야합니다.

<% 

/* 
    Class: HttpRequest 
     Object encapsulates the process of making an HTTP Request. 

    Parameters: 
     url - The gtarget url 
     data - Any paramaters which are required by the request. 
     method - Whether to send the request as POST or GET 
     options - async (true|false): should we send this asyncronously (fire and forget) or should we wait and return the data we get back? Default is false 

    Returns: 
     Returns the result of the request in text format. 

*/ 

var HttpRequest = function(url, data, method, options ) 
{ 
    options = options ? options : { "async" : false }; 
    options[ "async" ] = options["async"] ? true : false; 

    var text = ""; 
    data = data ? data : ""; 
    method = method ? String(method).toUpperCase() : "POST"; 

    // Make the request 
    var objXmlHttp = new ActiveXObject("MSXML2.ServerXMLHTTP"); 
    objXmlHttp.setOption(2, 13056); // Ignore all SSL errors 

    try { 
     objXmlHttp.open(method, url, options[ "async" ]); // Method, URL, Async? 
    } 
    catch (e) 
    { 
     text = "Open operation failed: " + e.description; 
    } 

    objXmlHttp.setTimeouts(30000, 30000, 30000, 30000); // Timeouts in ms for parts of communication: resolve, connect, send (per packet), receive (per packet) 
    try { 
     if (method == "POST") { 
      objXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
     } 

     objXmlHttp.send(data); 

     if (options[ "async" ]) { 
      return ""; 
     } 

     text = objXmlHttp.responseText; 

    } catch(e) { 
     text = "Send data failed: " + e.description; 
    } 

    // Did we get a "200 OK" status? 
    if (objXmlHttp.status != 200) 
    { 
     // Non-OK HTTP response 
     text = "Http Error: " + objXmlHttp.Status + " " + Server.HtmlEncode(objXmlHttp.StatusText) + "\nFailed to grab page data from: " + url; 
    } 

    objXmlHttp = null; // Be nice to the server 

    return text ; 
} 

%> 

당신이 (httprequest.asp라고 함) 파일에 그 내용을 저장하는 경우는이 코드를 사용하여 사용할 수 있습니다, 경고의

<%@ Language="JScript" %> 
<!--#include file="httprequest.asp"--> 
<% 

var url = "http://www.google.co.uk/search"; 
var data = "q=the+stone+roses"; // Notice you will need to url encode your values, simply pass them in as a name/value string 

Response.Write(HttpRequest(url, data, "GET")); 

%> 

하나의 단어를 그것으로 돌아갑니다 오류가있는 경우 당신은 오류 메시지, 그것을 잡을 방법이 없습니다. 우리의 요구에 잘 맞습니다. 조금 더 보호가 필요하다면 오류를 조금 더 잘 처리 할 수있는 사용자 정의 함수를 만들 수 있습니다.

희망이 있습니다.

+0

+1, 좋은 기능이지만 게시물이 HTML 양식 게시를 에뮬레이트한다고 가정합니다. 나는 그 가정을 제거하고 옵션 타입 객체에 컨텐트 타입 헤더를 옵션 속성으로 만들 것입니다. 기본값으로 지정할 수 있지만 "text/xml"과 같이 외부 코드에서 지정할 수 있습니다. – AnthonyWJones

+0

너무도 사실 인 앤서니 (Anthony)는 당시에 필요성에서 벗어나서 지금 우리가 필요로하는 기능 중 하나입니다. Jscript를 ASP에 사용하는 것을 좋아하는 이유 중 하나는 최근에 나온 클라이언트 측의 모든 장점과 기술에서 배울 수 있다는 것입니다. 옵션 객체를 통과 시키면 refactor가 쉽게 "contenttype"옵션을 전달할 수 있고 현재 사용하고있는 것을 손상시키지 않습니다. 좋은 지적이지만, 우리 코드베이스에 추가 할 수 있습니다;) –

+1

고마워요! 너는 구세주 야! – cgatian

1

모두 AJAXy는 XMLHttp를 사용합니다.
이 링크가 도움이되는지보기 - http://www.mikesdotnetting.com/Article.aspx?ArticleID=39

편집 :이 대답을 수락하지 마십시오.
내가 한 것은 Google을 사용하여 검색하는 것입니다. 너 먼저 해봤 니?

일부 질문은 검색을 통해 답변을 얻을 수 있습니다.
다른 모든 경우에는 StackOverflow가 있습니다.

4

클래식 ASP는 XMLHTTP ActiveX 개체 또는 MSXML 라이브러리를 통해 사용 가능한 ServerXMLHTTP 개체를 사용하여 요청을 시작할 수 있습니다. (MSDN reference).

This KB articleServerXMLHTTP 개체에 대한 좋은 참조 및 예제 코드를 제공합니다.

+1

여기서 ServerXMLHTTP를 사용하는 옵션이며 XMLHTTP는 서버 측에서 사용하면 안되며 스레드로부터 안전하지 않습니다. – AnthonyWJones

2

나는 여기에 설명이 함수의 비동기 버전이 "아니오 전송"오류를 작동하고 피할 이유 생각 :

How do I fire an asynchronous call in asp classic and ignore the response?

당신이 결코 비동기 버전에서 COM 개체를 해제하지하고 있다는인가를 - 문제가 해결되면 좋지만, 시간이 많이 낭비되는 것은 바람직하지 않습니다.