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
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.
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.
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
.
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
Je pense que la raison pour laquelle la version Async de cette fonction fonctionne et évite l'erreur « pas d'envoi » discuté ici:
How do I fire an asynchronous call in asp classic and ignore the response?
Est-ce que vous n'êtes jamais libérer l'objet COM dans la version Async - bon qu'il répare le problème, mauvais qu'il faille de grandes ressources de temps.
- 1. Code ASP classique sous Linux
- 2. Serveur Web ASP classique sous Windows 7
- 3. get_included_files dans ASP classique?
- 4. Cours accéléré ASP classique
- 5. global.asax et ASP classique?
- 6. Cookie.HTTPOnly dans ASP classique
- 7. Consommez webservice en ASP classique
- 8. détecter Server.Transfer dans ASP classique
- 9. problème Youtube XML ASP classique
- 10. Authentification ASP et ASP.Net classique
- 11. Tableau d'octets dans ASP classique
- 12. services web CONSOMMER asp classique
- 13. ASP classique dans ASP.NET MVC (C#)
- 14. Utilisation de SQLite avec ASP classique
- 15. Référence hors ligne classique ASP VBScript
- 16. Date/heure relative pour ASP classique
- 17. Tri d'une collection dans ASP classique
- 18. comment compter des enregistrements dans ASP classique?
- 19. Jquery combinaison POST avec ASP classique
- 20. Bibliothèque AJAX préférée pour ASP classique?
- 21. upload d'image asp classique avec flex
- 22. classique ASP dans IIS 6.0 n'échelle
- 23. données XML Trier dans ASP classique
- 24. Demande ASP classique GET sans multithread
- 25. comment implémenter url rewriting dans ASP classique
- 26. Exemples de curseurs JQuery avec ASP classique?
- 27. bibliothèque SQL ezSQL-like pour ASP classique?
- 28. Impossible d'écrire le fichier en ASP classique
- 29. ASP classique: server.CreateObject pas pris en charge
- 30. Response.Flush - événement OnFlush en ASP classique?
+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
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;) –
Merci! Tu es un sauveur! – cgatian