alemex 0 Denunciar post Postado Setembro 21, 2012 Olá pessoal, estou tendo alguns problemas para criar uma console application que faz o upload de um arquivo em um site da web, preciso simular um POST na página mas nao estou tendo sucesso, já pesquisei bastante e achei uma solução que me parece correta, adaptei ela ao meu caso, porém nao está funcionando. No codigo abaixo segue uma página web real para a qual eu estou tentando fazer o upload. Segue abaixo código que eu estou utilizando: class Program { static void Main(string[] args) { //Program.Test1(); Program.Test3(); Console.ReadLine(); } public static void Test3() { //Set this to dont get an Invalid Request Exception System.Net.ServicePointManager.Expect100Continue = false; //Set a real page for this test string url = "http://www.toledorocket.com/perftest/uploadtest/fileselect.asp"; string[] files = { "C:\\Documents and Settings\\wkurten\\Desktop\\fogao.txt" }; //Put some real file NameValueCollection nvc = new NameValueCollection(); nvc.Add("FILE1", "fogao.txt"); string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x"); HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create(url); httpWebRequest2.ContentType = "multipart/form-data; boundary=" + boundary; httpWebRequest2.Method = "POST"; httpWebRequest2.KeepAlive = true; httpWebRequest2.Credentials = System.Net.CredentialCache.DefaultCredentials; //Is you have an connection with proxy, uncomment and set the values bellow: /*NetworkCredential localNetworkCredential = new NetworkCredential("user", "pass", "domain"); httpWebRequest2.Proxy = new WebProxy("server:port", false); httpWebRequest2.Proxy.Credentials = localNetworkCredential;*/ Stream memStream = new System.IO.MemoryStream(); byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}"; foreach (string key in nvc.Keys) { string formitem = string.Format(formdataTemplate, key, nvc[key]); byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem); memStream.Write(formitembytes, 0, formitembytes.Length); } memStream.Write(boundarybytes, 0, boundarybytes.Length); string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n"; for (int i = 0; i < files.Length; i++) { string header = string.Format(headerTemplate, "file" + i, files[i]); //string header = string.Format(headerTemplate, "uplTheFile", files[i]); byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header); memStream.Write(headerbytes, 0, headerbytes.Length); FileStream fileStream = new FileStream(files[i], FileMode.Open, FileAccess.Read); byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) { memStream.Write(buffer, 0, bytesRead); } memStream.Write(boundarybytes, 0, boundarybytes.Length); fileStream.Close(); } httpWebRequest2.ContentLength = memStream.Length; Stream requestStream = httpWebRequest2.GetRequestStream(); memStream.Position = 0; byte[] tempBuffer = new byte[memStream.Length]; memStream.Read(tempBuffer, 0, tempBuffer.Length); memStream.Close(); requestStream.Write(tempBuffer, 0, tempBuffer.Length); requestStream.Close(); //Gets the response WebResponse webResponse2 = httpWebRequest2.GetResponse(); Stream stream2 = webResponse2.GetResponseStream(); StreamReader reader2 = new StreamReader(stream2); //Retrieve the html from response string htmlResponse = reader2.ReadToEnd(); webResponse2.Close(); httpWebRequest2 = null; webResponse2 = null; } } Quando eu recupero o WebResponse e Converto para o HTML, eu sempre recupero o HTML da página de envio do arquivo, e nunca a página de confirmação de que o arquivo foi enviado, é como se o POST que eu estou fazendo não esteja sendo executado... Abaixo a estrutura HTML da pagina com o FORM: <FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="uploadstatus.asp"> <INPUT TYPE="FILE" SIZE="40" NAME="FILE1"> <INPUT TYPE=SUBMIT VALUE="Upload!"> </FORM> Será que tem algo relacionado com o atributo ACTION do form? Agradeço des de já a ajuda! Obrigado. Criei um post no StackOverflow tbm.. caso alguem queira acessar: Clique aqui Compartilhar este post Link para o post Compartilhar em outros sites
alemex 0 Denunciar post Postado Setembro 21, 2012 galera.. após um tempo de busca achei a solução pro meu problema aqui: creio que era apenas uma formatacao errada no header que estava sendo montado! http://stackoverflow.com/questions/566462/upload-files-with-httpwebrequest-multipart-form-data Compartilhar este post Link para o post Compartilhar em outros sites