2010-01-26 7 views
7

Estoy tratando de simular una POST a un formulario en un servidor externo que no requiere ninguna autenticación, y capturar una picadura que contiene la página resultante. Esta es la primera vez que hago esto, así que estoy buscando ayuda con lo que tengo hasta ahora. Esto es lo que se ve la forma como:Usando HttpWebRequest para POSTAR a un formulario en un servidor externo

<FORM METHOD="POST" ACTION="/controller" NAME="GIN"> 
<INPUT type="hidden" name="JSPName" value="GIN"> 

Field1: 
<INPUT type="text" name="Field1" size="30" 
       maxlength="60" class="txtNormal" value=""> 

</FORM> 

Esto es lo que se ve mi código como:

ASCIIEncoding encoding = new ASCIIEncoding(); 
    string postData = "Field1=VALUE1&JSPName=GIN"; 
    byte[] data = encoding.GetBytes(postData); 
    // Prepare web request... 
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("https://XXX/controller"); 
    myRequest.Method = "POST"; 
    myRequest.ContentType = "text/html"; 
    myRequest.ContentLength = data.Length; 
    Stream newStream = myRequest.GetRequestStream(); 
    // Send the data. 
    newStream.Write(data, 0, data.Length); 

    StreamReader reader = new StreamReader(newStream); 
    string text = reader.ReadToEnd(); 

    MessageBox.Show(text); 

    newStream.Close(); 

Actualmente, el código devuelve "Stream no era legible".

Respuesta

8

desea leer la secuencia de respuesta:

using (var resp = myRequest.GetResponse()) 
{ 
    using (var responseStream = resp.GetResponseStream()) 
    { 
     using (var responseReader = new StreamReader(responseStream)) 
     { 
     } 
    } 
} 
+0

Bah, me adelantó;) – jvenema

+2

Considerando su representante, creo que es mejor que un montón de gente a la misma. –

+0

¿Hay alguna razón lógica por la que esto no funcionaría en una acción de controlador? – klkitchens

2
ASCIIEncoding encoding = new ASCIIEncoding(); 

string postData = "Field1=VALUE1&JSPName=GIN"; 
byte[] data = encoding.GetBytes(postData); 

// Prepare web request... 
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("https://XXX/"); 
myRequest.Method = "POST"; 
myRequest.ContentType = "text/html"; 
myRequest.ContentLength = data.Length; 

string result; 

using (WebResponse response = myRequest.GetResponse()) 
{ 
    using (var reader = new StreamReader(response.GetResponseStream())) 
    { 
     result = reader.ReadToEnd(); 
    } 
} 
+0

Creo que te refieres a 'response.GetResponseStream'. –

+0

Intenté hacer esta notificación como una edición indiscernible antes, que fue rechazada. HttpWebRequest incluso no tiene GetResponseStream(). – Independent

+0

Solucionado, gracias! ... –

Cuestiones relacionadas