2010-03-31 9 views
13

I necesidad de "Correo" algunos datos a un sitio web externo usando HttpWebRequest objeto de mi solicitud (de escritorio) y obtener una respuesta de nuevo en mi solicitud a través HttpWebResponse objeto. Pero la página web en la que estoy publicando datos tiene cuadros de texto que tienen nombres dinámicos.datos enviados a través de httpwebrequest

¿Cómo puedo obtener el nombre de esos cuadros de texto y publicar datos en HttpWebResquest?

Por ejemplo cuando la carga de la página el nombre de texto es como esto U2FsdGVkX183MTQyNzE0MrhLOmUpqd3eL60xF19RmCwLlSiG5nC1H6wvtBDhjI3uM1krX_B8Fwc pero cuando actualizar la página de cambio de nombre a esta U2FsdGVkX182MjMwNjIzMPAtotst_q9PP9TETomXB453Mq3M3ZY5HQt70ZeyxbRb118Y8GQbgP8.

Gracias por cualquier sugerencia.

Respuesta

9

Puede escribir esos nombres con XPath p. Ej. y el usuario les gusta:

byte[] data = new ASCIIEncoding().GetBytes("textBoxName1=blabla"); 
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost/myservlet"); 
httpWebRequest.Method = "POST"; 
httpWebRequest.ContentType = "application/x-www-form-urlencoded"; 
httpWebRequest.ContentLength = data.Length; 
Stream myStream = httpWebRequest.GetRequestStream(); 
myStream.Write(data,0,data.Length); 
myStream.Close(); 
30
var request = WebRequest.Create("http://foo"); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
using (var writer = new StreamWriter(request.GetRequestStream())) 
{ 
    writer.Write("field=value"); 
} 
+0

pero no sé el nombre del campo por adelantado. ese es el problema ???? los nombres de los campos no están codificados en forma rígida, ya que cambian cada vez que la página se carga o se actualiza. – user304901

+1

Abra otra pregunta para eso, ya que es completamente offtopic en ESTA pregunta (no quiere decir que está fuera de tema en SO en general) – jalgames

2

Parece que tendrá que llegar a la página con una HttpWebRequest y analizar el contenido de la correspondiente HttpWebResponse para averiguar los nombres de los cuadros de texto. A continuación, envíe los valores a la página utilizando otra HttpWebRequest.

Así que, básicamente, lo que hay que hacer es la siguiente:

  1. Emitir una HttpWebRequest con el método GET a la URL donde se encuentra la página con los cuadros de texto
  2. Consigue la secuencia de respuesta de la HttpWebResponse
  3. Analice la página contenida en la secuencia de respuesta y obtenga los nombres de los cuadros de texto. Puede usar HTML Agility Pack para este propósito.
  4. Emita un método HttpWebRequest con POST, con el tipo de contenido establecido en "application/x-www-form-urlencoded" y los pares clave-valor como el contenido.
0

Utilizo esta función para publicar datos. Pero la url que pase tiene que ser formateada como tal, por ejemplo,

http://example.com/login.php?userid=myid&password=somepassword

Private Function GetHtmlFromUrl(ByVal url As String) As String 

     If url.ToString() = vbNullString Then 
      Throw New ArgumentNullException("url", "Parameter is null or empty") 
     End If 
     Dim html As String = vbNullString 
     Dim request As HttpWebRequest = WebRequest.Create(url) 
     request.ContentType = "Content-Type: application/x-www-form-urlencoded" 
     request.Method = "POST" 


     Try 
      Dim response As HttpWebResponse = request.GetResponse() 
      Dim reader As StreamReader = New StreamReader(response.GetResponseStream()) 
      html = Trim$(reader.ReadToEnd) 
      GetHtmlFromUrl = html 
     Catch ex As WebException 
      GetHtmlFromUrl = ex.Message 
     End Try 

    End Function 
0

Primera parte de su problema: Tal vez el árbol HTML está estable. Luego puede encontrar su camino al cuadro de texto de su intercesión con XPath. Use XmlReader, XDocument y Linq para ir a través de él.

Cuestiones relacionadas