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.
- El usuario completa el formulario:
- Form submits to
process.asp
: NecesitoPOST
datos a una integración de terceros en este punto. -
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.
Si está atrapado con la clase ASP, puede hacerlo con la biblioteca comercial ASPHTTP aquí:
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