2008-12-19 17 views
17

Necesito datos de POST en una url en medio de una secuencia de comandos.¿Cómo PUESO datos en una URL remota en ASP clásica?

  1. usuario rellena el formulario:
  2. Formulario somete a process.asp: Necesito POST datos a un tercero la integración del partido en este punto.
  3. process.asp termina y ordena al usuario que le agradezca la página.
+0

.Net también permite ese tipo de procesamiento. Simplemente ponga su código processing.asp en el evento Click para un botón o control de hipervínculo, o incluso llámelo desde el evento Load si IsPostBack y _todos los envíos de formulario deben causar esto. –

+0

Esto fue etiquetado como .NET los primeros 20 minutos ... –

Respuesta

26

No estoy seguro de por qué todo el mundo es la publicación de ASP.Net soluciones cuando dijiste específicamente que estás usando 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!

+0

La pregunta originalmente tenía varias referencias .Net que luego se editaron. –

+0

El tipo de contenido es superfino para una solicitud GET, no hay contenido. El User-Agent es divertido pero también superfloo. – AnthonyWJones

+3

UserAgent no siempre es superfluo; en realidad, puede obtener contenido diferente en la respuesta dependiendo de ello. –

2

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

Classic ASP tiene una api completamente diferente- No estoy seguro de lo que usaría allí.

[editar]
Sospecho que si ASP clásico ha construido ninguna en apoyo a esta, está en un objeto de secuencias de comandos, así: CreateObject("Scripting.????")

0

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 
+0

Incluso eso es una exageración: system.net.webclient se encargará del 99% de sus solicitudes con mucho menos código. –

0

Puede hacerlo de muchas maneras. Con WebClient

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

O usted puede poner los datos en una corriente de utilizarlo en su programa:

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

Pero yo prefiero el uso HttpWebRequest:

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

Yo prefiero la segunda uno porque puede tener más opciones para POST/GET o para Cookie.

0

Utilice la clase que se describe aquí. Este es un muy buen método 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() ; 
    } 
} 

usarlo como:

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

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. Desde método ASP Server.URLEncode sólo lo hace la codificación de ruta y codificación no componente que necesita para reemplazar a cabo con caracteres/2F%

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

OK todas las respuestas eran muy complicados y sé que ya ha seleccionado una solución - pero me siento como el simple Server.Transfer() comando 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, solo haga un Server.Transfer (url) y pasará toda su colección de solicitudes a la siguiente página.

Lea sobre esto here (support.microsoft.com).

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

Cuestiones relacionadas