Foros del Web » Programación para mayores de 30 ;) » .NET »

Enviar archivos usando HTTPWebRequest Post desde WinForms

Estas en el tema de Enviar archivos usando HTTPWebRequest Post desde WinForms en el foro de .NET en Foros del Web. Buenas gente, estoy con un problema que necesito a ver si alguien puede iluminarme y ayudarme a solucionarlo... Estoy desarrollando una aplicación Windows que encripta ...
  #1 (permalink)  
Antiguo 25/04/2007, 16:18
 
Fecha de Ingreso: mayo-2003
Ubicación: Monte VI D.E.O.
Mensajes: 78
Antigüedad: 20 años, 11 meses
Puntos: 0
Enviar archivos usando HTTPWebRequest Post desde WinForms

Buenas gente, estoy con un problema que necesito a ver si alguien puede iluminarme y ayudarme a solucionarlo...

Estoy desarrollando una aplicación Windows que encripta archivos con OpenGP y luego los envía a una página .PHP que está en un servidor HTTPS.

El problema salta porque no solamente mando archivos, tengo que mandar un total de 15 parámetros: 7 archivos y 8 cadenas de texto.
Lamentablemente no tengo acceso a la aplicación .php y tengo que estar llamando constantemente a cada rato a la empresa que la administra para que me digan qué respondió o que devolvió, y en todos los casos me dicen que la información llega bien... menos los archivos...
Es decir, que los 8 parámetros correspondientes a las diferentes cadenas de texto sí llegan, pero los otros 7 parámetros en donde se supone que tienen que llegar los archivos *.gpg pues no llegan

En definitiva, mi problema son dos:
1) Conocen algún sniffer o programa que me permita ver la respuesta del servidor HTTPS para no andar llamando a cada rato a la empresa? (ya los tengo fastidiados seguramente)

2) Alguien puede darme un ejemplo de cómo postear los parámetros para que, los archivos vayan como archivos y las cadenas de texto vayan como cadenas de texto? imagino que tengo que manipular el "contentType" y esas cosas...

Para quienes puedan ayudarme, les adjunto el código y lo explico un poco:

Código:
private void button2_Click(object sender, System.EventArgs e)
{
//1) Implemento una interfaz sobreescrita de CertificatePolicy para no tener 
//    problemas con rechazos de certificados del SSL
System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
		
//2) Obtengo el directorio de donde voy a sacar los archivos
DirectoryInfo di = new DirectoryInfo(@"c:\convolgpg");
FileInfo[] rgFiles = di.GetFiles("*.gpg");

//3) Defino la dirección a donde voy a postearstring gatewayUrl = "https://sitio.com/paginita.php";

//4) Creo una instancia del objeto HttpWebResponseHttpWebResponse resp = null;
try 
{

//5) Instancio una variable de cadena en donde voy a ir guardando los 
//    resultados que voy a terminar posteando
string postData = "&clave=8f247c34e9"; //Le asigno el primer parametro

//6) Me fijo en todos los archivos dentro de la carpeta
//    que instancié más arriba
foreach(FileInfo fi in rgFiles) 
{
//7) Los parámetros que me piden son:
//    Por cada archivo que envío, debo mandar un parámetro adicional
//    que es el checksum del archivo utilizando SHA1
//    Los parametros que me piden son los siguientes:
//    alarmadispensario ===> es uno de los archivos que tengo que mandar
//    alarmadispensario_checksum ===> el resultado del SHA1
//    lo mismo para los otros archivos. Aqui en el código solo pongo tres de los 
//    7 archivos porque sino se me hace enorme el código
string identificador = fi.Name.Substring(16,3); //Para identificar qué archivo
switch(identificador) 
{
case "ADI":
string alarmadispensario;
using (StreamReader lector = new StreamReader(@"c:\convolgpg\" + fi.Name))
	{
	alarmadispensario = lector.ReadToEnd();
	}
FileStream f = new FileStream(@"c:\convolgpg\" + fi.Name,FileMode.Open,FileAccess.Read,FileShare.Read, 8192);
SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
StringBuilder sb = new StringBuilder();
foreach(byte b in sha1.ComputeHash(f)) 
{
sb.Append(b.ToString("x2").ToLower());
}
string alarmadispensarioCS = "&alarmadispensario_checksum=" + sb.ToString();

//8) Al string postData le agrego los dos nuevos parámetrospostData += "&alarmadispensario=" + alarmadispensario;
postData += alarmadispensarioCS;
break;
case "ATQ":
string alarmatanque;
using (StreamReader lector = new StreamReader(@"c:\convolgpg\" + fi.Name))
{
alarmatanque = lector.ReadToEnd();
}
f = new FileStream(@"c:\convolgpg\" + fi.Name,FileMode.Open,FileAccess.Read,FileShare.Read, 8192);
sha1 = new SHA1CryptoServiceProvider();
sb = new StringBuilder();
foreach(byte b in sha1.ComputeHash(f)) 
{
sb.Append(b.ToString("x2").ToLower());
}
string alarmatanqueCS = "&alarmatanque_checksum=" + sb.ToString();

//9) Y le agrego los otros dos nuevos parámetros...postData += "&alarmatanque=" + alarmatanque;
postData += alarmatanqueCS;
break;
case "VTA":
string ventas;
using (StreamReader lector = new StreamReader(@"c:\convolgpg\" + fi.Name))
{
ventas = lector.ReadToEnd();
}
f = new FileStream(@"c:\convolgpg\" + fi.Name,FileMode.Open,FileAccess.Read,FileShare.Read, 8192);
sha1 = new SHA1CryptoServiceProvider();
sb = new StringBuilder();
foreach(byte b in sha1.ComputeHash(f)) 
{
sb.Append(b.ToString("x2").ToLower());
}
string ventasCS = "&ventas_checksum=" + sb.ToString();

//10) Y por último los últimos dos 
//     (en total se supone que tengo 7 parámetros)
postData += "&ventas=" + ventas;
postData += ventasCS;
break;
}
}

//11) Genero una nueva instancia para presentar mis credenciales al sitioCredentialCache myCred = new CredentialCache();
myCred.Add(new Uri("https://sitio.com"),"BASIC",new NetworkCredential("usuario","password"));

//12) Genero una nueva instancia del objeto HttpWebRequestHttpWebRequest  request = (HttpWebRequest)WebRequest.Create(gatewayUrl);

//13) Le asigno las credenciales que hicerequest.Credentials = myCred;

//14) Le indico el User Agentrequest.UserAgent ="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";

//15) En un arreglo de bytes byte[]  postDataBytes = Encoding.UTF8.GetBytes(postData);

//16) El resto supongo que no hace falta que lo explique:request.Method = "POST";
request.ContentType = "automatic/name";
request.ContentLength = postDataBytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postDataBytes, 0 ,postDataBytes.Length);

resp = (HttpWebResponse)request.GetResponse();

StreamReader responseReader =  new StreamReader(resp.GetResponseStream(), Encoding.UTF8);

resp.Close(); 
requestStream.Close();
} 
catch() 
{
} 
finally 
{
if ( resp != null ) 
{
resp.Close();
}
}		
}

Que estoy haciendo mal??????
Que me falta por ordenar / arreglar / quitar?????
Por favor ayúdenme
__________________
:adios: Henry Rodriguez :adios:
El todo es mucho mas que la suma de las partes<-- No se quien lo dijo pero suena interesante :)
  #2 (permalink)  
Antiguo 07/03/2008, 18:54
Usuario no validado
 
Fecha de Ingreso: marzo-2008
Ubicación: Morelia Mich. México
Mensajes: 37
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Enviar archivos usando HTTPWebRequest Post desde WinForms

hola que tal , soy nuevo en el foro, tengo un problemita, y es que soy nuevo en C#, no havia tenido la necesidad de utilizarlo, y el primer problema que me surge es que no he podido hacer el metodo de encriptacion GPG, me seria de gran ayuda si me pudieras dar un ejemplo o cual metodo puedo utilizar para realizar la encriptacion.
de antemano gracias por la ayuda que me puedas brindar
  #3 (permalink)  
Antiguo 10/03/2008, 15:00
Usuario no validado
 
Fecha de Ingreso: marzo-2008
Ubicación: Morelia Mich. México
Mensajes: 37
Antigüedad: 16 años, 1 mes
Puntos: 0
Información Re: Enviar archivos usando HTTPWebRequest Post desde WinForms

Revisa esto:
request.ContentType = "automatic/name";
Por eso no resives tu respuesta, porque no estas mandando los datos como se deben de mandar.
con esta es para enviar cadenas que es lo que te hace falta;
request.ContentType = "application/x-www-form-urlencoded";
y exixte otro metodo que es para enviar archivos;
httpWebRequest.ContentType = "multipart/form-data; boundary=" + boundary;

mira en esta pagina: http://developer.nirvanix.com/forums/p/56/126.aspx
Espero que te saque de la duda y me puedas ayudar con lo que solicito antes de este mensaje.
  #4 (permalink)  
Antiguo 02/02/2010, 13:39
 
Fecha de Ingreso: febrero-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Enviar archivos usando HTTPWebRequest Post desde WinForms

Fijate en este link donde explico como hacerlo.
Esta en vb .net, si hago tiempo lo paso a C, pero es bastante transparente el traspaso.

[URL="http://www.forosdelweb.com/f29/post-vb-net-743175/#post3265260"]http://www.forosdelweb.com/f29/post-vb-net-743175/#post3265260[/URL]

Saludos
  #5 (permalink)  
Antiguo 02/02/2010, 15:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Enviar archivos usando HTTPWebRequest Post desde WinForms

jmo25: Trata de no despertar los muertos.
El post original es de hace tres años, y el forista no se ha conectado desde abril de 2007.
Francamente no creo que le interese más el tema o la respuesta.
Te comento que los moderadores tienen por regla cerrar los post viejos cuando alguien los resucita (es política de FDW).
Trata de fijate en las fechas del primer post para no desperdiciar tiempo: Si es muy vieja y el forista no tiene muchos mensajes (menos de 100), es muy probable que ya no ande por aquí.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:47.