Retroceder   Foros del Web > Programación para sitios web > .NET > win forms

Respuesta
 
Herramientas Desplegado
Antiguo 25-abr-2007, 16:18   #1 (permalink)
jjmagro está en el buen camino
 
Fecha de Ingreso: mayo-2003
Ubicación: Monte VI D.E.O.
Mensajes: 78
Enviar un mensaje por AIM a jjmagro Enviar un mensaje por Yahoo  a jjmagro
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 :)
jjmagro está desconectado   Responder Citando
Antiguo 07-mar-2008, 17:54   #2 (permalink)
Makoynet ha deshabilitado el karma
 
Fecha de Ingreso: marzo-2008
Ubicación: Morelia Mich. México
Mensajes: 21
Enviar un mensaje por MSN a Makoynet Enviar un mensaje por Yahoo  a Makoynet Enviar un mensaje por Skype™ a Makoynet
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
Makoynet está desconectado   Responder Citando
Antiguo 10-mar-2008, 15:00   #3 (permalink)
Makoynet ha deshabilitado el karma
 
Fecha de Ingreso: marzo-2008
Ubicación: Morelia Mich. México
Mensajes: 21
Enviar un mensaje por MSN a Makoynet Enviar un mensaje por Yahoo  a Makoynet Enviar un mensaje por Skype™ a Makoynet
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.
Makoynet está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 1 votos, 4,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 03:09.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93