Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/04/2007, 16:18
jjmagro
 
Fecha de Ingreso: mayo-2003
Ubicación: Monte VI D.E.O.
Mensajes: 78
Antigüedad: 21 años
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 :)