Autor Tema: Envío de un fichero a una página web  (Leído 1756 veces)

0 Usuarios y 1 Visitante están viendo este tema.

yokmismo

  • Bit
  • Mensajes: 2
  • Reputación: +0/-0
    • Ver Perfil
Envío de un fichero a una página web
« en: Junio 28, 2013, 04:33:58 pm »
Buenas tardes a todos

Estoy haciendo un programa de gestión de hotel, que, entre otras funciones, manda unos datos a los servidores de la Guardia Civil para llevar un control de viajeros que entra diariamente.

No se si alguien de aquí ha conseguido o tiene experiencia con este servicio de la Guardia Civil, pero yo no he tenido narices a conseguir mandarles los datos de la manera correcta.

Os pego aquí el código que uso y que falla miserablemente
--------código------------
''antes de nada vamos a desactivar en nuestra aplicacion la validacion https:
ServicePointManager.ServerCertificateValidationCal lback = _
Function(se As Object, _
cert As System.Security.Cryptography.X509Certificates.X509 Certificate, _
chain As System.Security.Cryptography.X509Certificates.X509 Chain, _
sslerror As System.Net.Security.SslPolicyErrors) True

''primero recuperamos el nombre del fichero que acabamos de grabar...

ficheroaenviar = rutagc + usuariogc + "." + numeroactual


''-----------envio fichero a la guardia civil --------''

''creamos el fichero header con la información para el servidor de la Guardia Civil
Dim header As New System.Text.StringBuilder()

header.Append("<form method=" & Chr(34) & "post" & Chr(34) & " enctype=" & Chr(34) & "multipart/form-data" & Chr(34) & " action=" _
& Chr(34) & "http://" & usuariogc & ":" & pwdgc & "@www.iaspre.es/hospederias/servlet/ControlRecepcionFichero" & Chr(34) & ">")
header.AppendLine()
header.Append("<td> <input type=" & Chr(34) & "file" & Chr(34) & " size=20 name=" & Chr(34) & "fichero" & Chr(34) & "> </td>")
header.AppendLine()
header.Append("<td> <input type=" & Chr(34) & "submit" & Chr(34) & " value=" & Chr(34) & "upload" & Chr(34) & "> </td>")
header.Append("</form>")



Dim url As String = "https://" + usuariogc + ":" + pwdgc + "@" + "www.iaspre.es/hospederias/servlet/ControlRecepcionFichero"
Dim headerbytes() As Byte = System.Text.Encoding.UTF8.GetBytes(header.ToString )
Dim filebytes() As Byte = My.Computer.FileSystem.ReadAllBytes(ficheroaenviar )

Dim req As Net.HttpWebRequest = Net.HttpWebRequest.Create(url)

req.Credentials = New NetworkCredential(usuariogc, pwdgc)
req.Method = "POST"

Dim s As IO.Stream = req.GetRequestStream
s.Write(headerbytes, 0, headerbytes.Length)
s.Write(filebytes, 0, filebytes.Length)
s.Close()

Dim response As String = req.GetResponse().ToString '' as WebResponse

-------- FIN código------------
Pues bien, si el envío hubiera sido correcto, como mínimo tiene que llegarme un aviso a mi correo electrónico avisándome de que así ha sido.

Si no uso la variable response, sencillamente no pasa nada, ningún tipo de aviso por parte del vb.net ni nada.
Si uso la variable response, me tira errores por todos lados.
Curiosamente si uso el código:

My.Computer.Network.UploadFile(ficheroaenviar, New Uri("https://" + usuariogc + ":" + pwdgc + "@" + "www.iaspre.es/hospederias/servlet/ControlRecepcionFichero"), usuariogc, pwdgc)

Sí que funciona, pero tiene el problema (corregidme si me equivoco) de que así no puedo hacer un control desde mi programa de los errores que arrojaría el servidor.

Creo que la clave está en que el servidor espera un fichero txt con un nombre en concreto y dentro de el los datos requeridos, y con webrequest no le mando un fichero, sino los datos directamente y no debe aceptarlos...

Lo dicho, me trae loco esto, a ver si podéis arrojar algo de luz sobre esto, os estaría MUY agradecido.

Un saludo.

wolf_kof

  • Visitante
Re:Envío de un fichero a una página web
« Respuesta #1 en: Junio 29, 2013, 02:42:02 pm »
Antes que nada verifica si ellos no te pueden dar una DLL para hacer la carga, para mi que el error consiste en la autenticación de datos, busca un ejemplo de como controlar los datos para la autenticación, verifica el procedimiento de autenticación para ver que el proceso que creaste respectivamente entra en el sistema de ellos.

yokmismo

  • Bit
  • Mensajes: 2
  • Reputación: +0/-0
    • Ver Perfil
Re:Envío de un fichero a una página web
« Respuesta #2 en: Junio 29, 2013, 05:34:28 pm »
Muchas gracias por la respuesta

esta manera de autenticar es evidente que funciona, porque el servidor me manda al correo la confirmación de recibo:

My.Computer.Network.UploadFile(ficheroaenviar, New Uri("https://" + usuariogc + ":" + pwdgc + "@" + "www.iaspre.es/hospederias/servlet/ControlRecepcionFichero"), usuariogc, pwdgc)

aunque no se qué tipo de autenticación es, además de que como se puede ver, lo hago 2 veces, en la URL, y en los parametros de .uploadfile.

la gran diferencia que veo, es que con uploadfile, subo el fichero txt tal cual, con un nombre muy definido ( ellos te dicen como tiene que ser). Y con el otro método no subo ningún fichero en particular (ni ningún nombre), sino que le envío un conjunto de bytes que componen el fichero, y me parece que el servidor pasa de mi...

lo que me gustaría es encontrar el método de subir el fichero al estilo network.uploadfile, peeeeero que permita una respuesta del servidor (que supongo me dará) para comunicarme si esta bien o no el envío y actuar de una manera u otra en el programa.

Muchas gracias de antemano por la ayuda porque estoy "desesperado" XD

Un saludo