Visual Basic.NET - Envío de un fichero a una página web (me estoy volviendo loco)

 
Vista:

Envío de un fichero a una página web (me estoy volviendo loco)

Publicado por yokmismo (1 intervención) el 27/06/2013 11:34:52
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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder