4

我有一个经典的 asp 应用程序,需要将 XML 发布到支付引擎,参考代码使用 System.Net.HttpWebRequest 对象 (asp.net)。我可以使用经典 ASP 中的等效项来发布 XML 吗?

4

4 回答 4

6

这是我用于在 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" ) );

%>

一个警告,如果它有错误它会返回给你错误信息,没有办法捕捉它。它可以满足我们的需求,如果我们需要更多的保护,那么我们可以创建一个可以更好地处理错误的自定义函数。

希望有帮助。

于 2009-06-01T13:23:34.863 回答
4

经典 ASP 可以使用XMLHTTPActiveX 对象或ServerXMLHTTP通过 MSXML 库提供的对象来发起请求。(MSDN 参考)。

这篇知识库文章提供了一个很好的对象参考和示例代码ServerXMLHTTP

于 2009-06-01T06:03:42.337 回答
2

我认为此函数的异步版本有效并避免此处讨论的“不发送”错误的原因:

如何在 asp classic 中触发异步调用并忽略响应?

是不是你永远不会在异步版本中释放 COM 对象 - 很好,它解决了问题,坏的是它泄漏了大量时间资源。

于 2011-02-22T23:06:08.587 回答
1

所有 AJAXy 都使用 XMLHttp。
看看这个链接是否有帮助 - http://www.mikesdotnetting.com/Article.aspx?ArticleID=39

编辑:不要接受这个答案。
我所做的只是使用谷歌搜索它。你先尝试过吗?

我想有些问题可以通过搜索来回答。
对于其他一切,都有 StackOverflow。

于 2009-06-01T04:25:21.367 回答