world tutorial switch programacion lenguaje hello example classic asp asp-classic

asp-classic - tutorial - hello world asp classic



¿Cómo PUESO datos a una URL remota en ASP clásica? (8)

En .Net es System.Net.WebClient o System.Net.HttpWebRequest.

Classic ASP tiene una api completamente diferente. No estoy seguro de qué usarías allí.

[editar]
Sospecho que si el ASP clásico tiene algún soporte integrado para esto, está en un objeto de creación de secuencias de comandos, como por ejemplo: CreateObject("Scripting.????")

Necesito POST datos a una url en el medio de un script.

  1. El usuario completa el formulario:
  2. Form submits to process.asp : Necesito POST datos a una integración de terceros en este punto.
  3. process.asp finaliza y dirige al usuario a la página de agradecimiento.

En ASP.NET, es bastante simple:

HttpWebRequest r = (HttpWebRequest)WebRequest.Create("http://www.google.com"); r.Method = "POST"; using (Stream stream = myRequest.GetRequestStream()) { // Write data to stream } WebResponse resp = r.GetResponse(); // Do soemthing with the resp


No estoy seguro de por qué todos los demás publican soluciones ASP.Net cuando usted específicamente dijo que está utilizando ASP "clásico".

Algo como esto debería funcionar. No escribí el código; Lo encontré en otro lado. Pero el objeto MSXML2.ServerXMLHTTP es lo que desea utilizar si no desea comprar algo comercial.

function getHTML (strUrl) Set xmlHttp = Server.Createobject("MSXML2.ServerXMLHTTP") xmlHttp.Open "GET", strUrl, False xmlHttp.setRequestHeader "User-Agent", "asp httprequest" xmlHttp.setRequestHeader "content-type", "application/x-www-form-urlencoded" xmlHttp.Send getHTML = xmlHttp.responseText xmlHttp.abort() set xmlHttp = Nothing end function

Es posible que necesite agregar algún código de manejo de errores para usarlo en un entorno de producción. Creo que el objeto arroja errores si obtiene un error 404 o de tiempo de espera. Tendrá que "atraparlos" al estilo ASP (yuck) configurando On Error Resume Next antes de .Enviar y luego examinar el objeto de error ASP para ver si hubo un problema.

¡Buena suerte!


Puedes hacerlo de muchas maneras. Con WebClient

WebClient Client = new WebClient (); Client.DownloadFile("http://www..com/myfile.html", "myfile.html");

O puede poner los datos en una secuencia para usarlos en su programa:

WebClient Client = new WebClient (); Stream strm = Client.OpenRead ("http://www..com/myfile.htm");

Pero prefiero usar HttpWebRequest :

HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create("http://www..com/myfile.html"); StreamWriter myWriter = new StreamWriter(objRequest.GetRequestStream());

Prefiero el segundo porque puede tener más opciones para POST / GET o para Cookie.



Usa la clase descrita aquí. Este es un método bastante bueno y lo uso todo el tiempo:

http://www.jigar.net/articles/viewhtmlcontent78.aspx

public class RemotePost{ private System.Collections.Specialized.NameValueCollection Inputs = new System.Collections.Specialized.NameValueCollection() ; public string Url = "" ; public string Method = "post" ; public string FormName = "form1" ; public void Add( string name, string value ){ Inputs.Add(name, value ) ; } public void Post(){ System.Web.HttpContext.Current.Response.Clear() ; System.Web.HttpContext.Current.Response.Write( "<html><head>" ) ; System.Web.HttpContext.Current.Response.Write( string .Format( "</head><body onload=/"document.{0}.submit()/">" ,FormName)) ; System.Web.HttpContext.Current.Response.Write( string .Format( "<form name=/"{0}/" method=/"{1}/" action=/"{2}/" >" , FormName,Method,Url)) ; for ( int i = 0 ; i< Inputs.Keys.Count ; i++){ System.Web.HttpContext.Current.Response.Write( string .Format( "<input name=/"{0}/" type=/"hidden/" value=/"{1}/">" ,Inputs.Keys[i],Inputs[Inputs.Keys[i]])) ; } System.Web.HttpContext.Current.Response.Write( "</form>" ) ; System.Web.HttpContext.Current.Response.Write( "</body></html>" ) ; System.Web.HttpContext.Current.Response.End() ; } }

Úselo como:

RemotePost myremotepost = new RemotePost() ; myremotepost.Url = "http://www.jigar.net/demo/HttpRequestDemoServer.aspx" ; myremotepost.Add( "field1" , "Huckleberry" ) ; myremotepost.Add( "field2" , "Finn" ) ; myremotepost.Post() ;


OK, todas las respuestas fueron muy complicadas y sé que ya seleccionó una solución, pero siento que el simple comando Server.Transfer () podría haber hecho exactamente lo que necesita.

Al final de su secuencia de comandos en lugar de Response.Redirect (url) a la nueva página, simplemente haga un Server.Transfer (url) y pasará toda su colección Request a la siguiente página.

Lea sobre esto aquí (support.microsoft.com).

Hay algunas capturas (es decir, mantiene la misma URL en el navegador para que pueda jugar trucos con el botón Atrás y cosas por el estilo), pero de lo contrario es bastante simple.


La mayoría de las páginas de acción de formulario aceptan datos como POST.

Function postFormData(url, data) Dim xhr : Set xhr = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") xhr.open "POST", url, false xhr.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" xhr.send Data If xhr.Status = 200 Then postFormData = xhr.ResponseText Else Err.Raise 1001, "postFormData", "Post to " & url & " failed with " & xhr.Status End If End Function

Al crear los datos, la codificación de url es necesaria en los valores de los datos. Como el método ASP.Server.URLEncode solo hace la codificación de ruta y no la codificación de componente, necesita reemplazar out / characters con% 2F

Function URLEncodeComponent(value) URLEncodeComponent = Server.URLEncode(value) URLEncodeComponent = Replace(URLEncodeComponent, "/", "%2F") End Function