2009-06-01 10 views
4

J'ai une application asp classique qui a besoin de publier du code XML sur un moteur de paiement, et le code de référence utilise un objet System.Net.HttpWebRequest (asp.net). Existe-t-il un équivalent en ASP classique que je pourrais utiliser pour publier le XML?System.Net.HttpWebRequest sous ASP classique?

Répondre

6

Voici une petite fonction d'aide que j'utilise pour faire des requêtes HTTP en ASP. C'est en JScript mais vous devriez avoir l'idée au moins et quelques conseils de quelques pièges que nous avons dû aplanir au fil des ans.

<% 

/* 
    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 ; 
} 

%> 

Si vous enregistrez que dans un fichier (appelé httprequest.asp) la vous pouvez l'utiliser en utilisant ce code:

<%@ 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")); 

%> 

Un mot d'avertissement, si elle a une erreur, il retourne à vous le message d'erreur, aucun moyen de l'attraper. Cela fonctionne bien pour nos besoins, si nous avons besoin d'un peu plus de protection, nous pouvons créer une fonction personnalisée qui peut mieux gérer les erreurs.

Espérons que ça aide.

+0

+1, C'est une jolie petite fonction mais elle suppose qu'un post émule un post HTML Form. Je supprimer cette hypothèse et rendre l'en-tête de type de contenu une propriété facultative sur l'objet options. Vous pouvez le faire par défaut mais autoriser le code externe à le spécifier comme "text/xml". – AnthonyWJones

+0

Trop vrai Anthony, c'est une de ces fonctions qui est née du besoin à l'époque et qui répond à nos besoins pour l'instant. L'une des raisons pour lesquelles j'adore utiliser JScript pour ASP est que vous pouvez apprendre de toutes les astuces client et des techniques qui ont vu le jour ces dernières années. En passant un objet d'options à travers celui-ci, il serait facile de le refactoriser pour permettre le passage d'une option "contenttype" tout en ne cassant rien de ce qui l'utilise actuellement. Bon point cependant, je pourrais chercher à l'ajouter à notre base de code;) –

+1

Merci! Tu es un sauveur! – cgatian

1

Tout AJAXy utilise XMLHttp.
Voir si ce lien aide - http://www.mikesdotnetting.com/Article.aspx?ArticleID=39

EDIT: N'accepte pas cette réponse.
Ce que j'ai fait est juste de le rechercher en utilisant google. Avez-vous essayé cela en premier?

Je suppose que certaines des questions peuvent être résolues par une recherche.
Pour tout le reste, il y a StackOverflow.

4

ASP classique peut utiliser l'objet ActiveX XMLHTTP ou l'objet ServerXMLHTTP disponible via la bibliothèque MSXML pour initier des demandes. (MSDN reference).

This KB article fournit une bonne référence et un exemple de code de l'objet ServerXMLHTTP.

+1

ServerXMLHTTP est l'option à utiliser ici, XMLHTTP ne doit pas être utilisé côté serveur, il n'est pas sécurisé pour les threads. – AnthonyWJones