System.Net.HttpWebRequest в классическом asp?

У меня есть классическое приложение asp, которое должно отправлять XML в обработчик платежей, а ссылочный код использует объект System.Net.HttpWebRequest (asp.net). Есть ли в Classic ASP эквивалент, который я мог бы использовать для публикации XML?

4 ответа

Решение

Вот небольшая вспомогательная функция, которую я использую для выполнения HTTP-запросов в ASP. Это в 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" ) );

%>

Одно слово предупреждения: если у него есть ошибка, он вернет вам сообщение об ошибке, и его никак не поймать. Это хорошо для наших нужд, если нам нужно немного больше защиты, тогда мы можем создать пользовательскую функцию, которая будет лучше обрабатывать ошибки.

Надеюсь, это поможет.

Классический ASP может использовать XMLHTTP Объект ActiveX или ServerXMLHTTP объект доступен через библиотеку MSXML для инициирования запросов. ( Ссылка на MSDN).

Эта статья базы знаний содержит хороший справочник и пример кода ServerXMLHTTP объект.

Я думаю, что причина асинхронной версии этой функции работает и избегает ошибки "нет отправки", обсуждаемой здесь:

Как мне запустить асинхронный вызов в asp classic и игнорировать ответ?

В том, что вы никогда не освобождаете COM-объект в Async-версии - хорошо, что это решает проблему, плохо, что он теряет большие ресурсы времени.

Все, что AJAXy использует XMLHttp.
Посмотрите, поможет ли эта ссылка - http://www.mikesdotnetting.com/Article.aspx?ArticleID=39

РЕДАКТИРОВАТЬ: не принимать этот ответ.
То, что я сделал, это просто поиск с помощью Google. Вы пробовали это первым?

Я думаю, что на некоторые вопросы можно ответить с помощью поиска.
Для всего остального есть Stackru.

Другие вопросы по тегам