sábado, 25 de febrero de 2012

Envio de datos a un servidor web utilizando vb.net y recibir respuesta


Muchas veces es necesario enviar datos de una aplicación a un sitio web para diferentes actividades, 

las solicitudes se envían desde una aplicación a un identificador URI concreto, como una página Web de un servidor. El identificador URI determina la clase descendiente adecuada que se debe crear a partir de una lista de descendientes de WebRequest registrados para la aplicación. Los descendientes de WebRequest suelen registrarse para controlar un protocolo específico, como HTTP o FTP, pero se pueden registrar para controlar una solicitud a un servidor específico o una ruta de acceso en éste.

Para programar esto se necesita algo como lo que les e puesto a continuación  


ES NECESARIO PARA ESTO :

Un formulario









En VB.NET
IMPORTAR ESTAS LIBRERIAS:
Imports System.Net, System.Net.Sockets
Imports System.Web
Imports System.IO
Imports System.Text

  
EN EL BOTON PROGRAMAR ESTO:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
      ‘// con esto llamo a la function usarPHP, donde le envió como parámetro: el url, el tipo POST, y las variables  nombre  edad  
     
      Dim resultadohtml As String = usarPHP("http://localhost/socket/prueba.php", "POST", "nombre=" & TextBox1.Text & "&edad=38 ")
   
     ‘// con esto muestro mel resultado en la caja de texto grande
       TextBox2.Text = resultadohtml

End Sub

LA FUNCION usarPHP ES LA SIGUIENTE
‘// esta función recibe los parámetros antes mencionados  el url, el tipo POST, y las variables  nombre  edad  llegan en cadena a la variable data
Public Function usarPHP(ByVal url As String, ByVal method As String, ByVal data As String)
        Try
            ‘//creamos la forma como se enviara los datos, en este caso “POST”
            Dim request As System.Net.WebRequest = System.Net.WebRequest.Create(url)
            request.Method = method

            ‘//variable para tomar los datos del parámetro data que llega a la funcion
            Dim postData = data

            ‘//arreglo de bytes codificados con UTF8 para enviar los datos
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
            request.ContentType = "application/x-www-form-urlencoded"
            request.ContentLength = byteArray.Length
            Dim dataStream As Stream = request.GetRequestStream()
            dataStream.Write(byteArray, 0, byteArray.Length)
            dataStream.Close()

            ‘//con esto manejamos las respuestas del servidor
            Dim response As WebResponse = request.GetResponse()
            dataStream = response.GetResponseStream()
            Dim reader As New StreamReader(dataStream)
            Dim responseFromServer As String = reader.ReadToEnd()
            reader.Close()
            dataStream.Close()
            response.Close()
            Return (responseFromServer)
        Catch ex As Exception
            Dim error1 As String = ErrorToString()
            If error1 = "Direccion Invalida!!: el formato no ha sido determinado." Then
                MsgBox("ERROR! Debe de tener  http:// antes de la URL")
            Else
                MsgBox(error1)
            End If
            Return ("ERROR")
        End Try
    End Function

EN EL SERVIDOR WEB DEBERIA DE TENER LO SIGUIENTE
Tener una página http://localhost/socket/prueba.php ; el PHP  debería tener lo siguiente 
<?PHP
echo $_REQUEST["nombre"];
echo $_REQUEST["edad"];
?>

3 comentarios:

  1. la funcion funciona de mil maravilla, junto necesita esto para guardar datos a mysql

    ResponderEliminar
  2. Hola buen dia disculpe algun ejemplo para recibir la respuestausando tokens de la siguiente manera:
    https://dniruc.apisperu.com/api/v1/dni/12345678?token=MITOKEN
    Estare agradecido

    ResponderEliminar
  3. logre hacerlo pero me devuelve esta cadena, por favor como obtengo solo los datos puros:
    {"dni":"42948117","nombres":"JOSE WILLIANS","apellidoPaterno":"NAVARRO","apellidoMaterno":"YOVERA","codVerifica":"7"}

    ResponderEliminar