【问题标题】:System.Net.HttpWebRequest in classic asp?经典asp中的System.Net.HttpWebRequest?
【发布时间】:2010-10-30 07:58:48
【问题描述】:

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

【问题讨论】:

    标签: xml post asp-classic request xmlhttprequest


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      希望对您有所帮助。

      【讨论】:

      • +1,它是一个不错的小功能,但它确实假设帖子正在模拟 HTML 表单帖子。我将删除该假设并将内容类型标头作为选项对象的可选属性。您可以默认它,但允许外部代码指定它,例如“text/xml”。
      • 太真实了 Anthony,它是当时因需要而产生的功能之一,现在适合我们的需要。我喜欢将 JScript 用于 ASP 的原因之一是您可以从近年来出现的所有客户端优点和技术中学习。通过传递一个选项对象,很容易重构以允许传递一个“内容类型”选项,同时仍然不会破坏当前使用它的任何东西。不过很好,我可能会考虑将其添加到我们的代码库中;)
      【解决方案3】:

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

      This KB article 提供了一个很好的参考和ServerXMLHTTP 对象的示例代码。

      【讨论】:

      • ServerXMLHTTP 是这里使用的选项,XMLHTTP 不应该在服务器端使用,它不是线程安全的。
      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 2012-01-24
        • 2015-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多