Не понимаю, как работать с HttpWebRequest
От: Northrop  
Дата: 15.07.09 14:54
Оценка:
private string GetResponseText(HttpWebRequest request)
        {
            string s;
            using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
            {
                StreamReader responseReader = new StreamReader(resp.GetResponseStream(), System.Text.Encoding.GetEncoding(1251));
                s = responseReader.ReadToEnd();
                resp.Close();
            }

            return s;
        }

        private string  UploadFilesToRemoteUrl(string file)
        {
            CookieContainer cc = new CookieContainer();

            long length = 0;
            string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
            string boundaryEnd = boundary  + "--";


            HttpWebRequest httpWebRequest1 = (HttpWebRequest)WebRequest.Create(@"http://zalil.ru/");
            httpWebRequest1.Method = "GET";
            httpWebRequest1.KeepAlive = true;
            httpWebRequest1.Accept = "*/*";
            httpWebRequest1.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 3.0.04506.648;)";
            httpWebRequest1.Headers.Add("Accept-Language", "en-us");
            httpWebRequest1.Headers.Add("Accept-Encoding", "gzip, deflate");
            httpWebRequest1.CookieContainer = cc;
            string r = GetResponseText(httpWebRequest1);

            HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create(@"http://zalil.ru/upload/");
            httpWebRequest2.ContentType = "multipart/form-data; boundary=" + boundary;
            httpWebRequest2.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip | DecompressionMethods.None;
            httpWebRequest2.Method = "POST";
            httpWebRequest2.KeepAlive = true;
            httpWebRequest2.Referer = @"http://zalil.ru/";
            httpWebRequest2.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 3.0.04506.648;)";
            httpWebRequest2.Headers.Add("Accept-Language", "en-us");
            httpWebRequest2.Headers.Add("Accept-Encoding", "gzip, deflate");
            httpWebRequest2.CookieContainer = cc;

            Stream memStream = new System.IO.MemoryStream();

            byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
            byte[] boundarybytesEnd = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundaryEnd + "\r\n");


            memStream.Write(boundarybytes, 0, boundarybytes.Length);
            length += boundarybytes.Length;

            string header = string.Format("Content-Disposition: form-data; name=\"file111111111111111111\";filename=\"{0}\"\r\nContent-Type: application/octet-stream\r\n\r\n", file);
            byte[] headerbytes = System.Text.Encoding.ASCII.GetBytes(header);

            memStream.Write(headerbytes, 0, headerbytes.Length);
            length += headerbytes.Length;

            FileStream fileStream = new FileStream(file, 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);
                length += bytesRead;
            }


            memStream.Write(boundarybytesEnd, 0, boundarybytesEnd.Length);
            length += boundarybytesEnd.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();


            r = GetResponseText(httpWebRequest2);

            httpWebRequest2 = null;
            return r;
        }



..........................

                string sResponse = UploadFilesToRemoteUrl(@"C:\PRJ\HttpSubmitter\MMMMMMM.dat");



В итоге, в sResponse оказывается текст с сообщением от ZALIL.RU, что файл не закачан. В чем у меня ошибка? Причем такой же файл из IE и FF закачивается.
Re: Не понимаю, как работать с HttpWebRequest
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.07.09 03:05
Оценка:
Здравствуйте, Northrop, Вы писали:

N>В итоге, в sResponse оказывается текст с сообщением от ZALIL.RU, что файл не закачан. В чем у меня ошибка? Причем такой же файл из IE и FF закачивается.

Потрассируйся при помощи Fiddler2.com. Посмотри, чем отличаются твои запросы от браузерных.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Не понимаю, как работать с HttpWebRequest
От: Calabon Ниоткуда  
Дата: 16.07.09 09:20
Оценка:
Тебе нужно полностью воспоизвести хттп хидер, без сниффера это делать неблагадарное дело.
Будет очень много проблем
Re[2]: Не понимаю, как работать с HttpWebRequest
От: Northrop  
Дата: 16.07.09 15:08
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Northrop, Вы писали:


N>>В итоге, в sResponse оказывается текст с сообщением от ZALIL.RU, что файл не закачан. В чем у меня ошибка? Причем такой же файл из IE и FF закачивается.

S>Потрассируйся при помощи Fiddler2.com. Посмотри, чем отличаются твои запросы от браузерных.

В общем, у меня Content-Length: 8075, в FF — Content-Length: 8028.

Что мне у себя менять?
Re[3]: Не понимаю, как работать с HttpWebRequest
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.07.09 03:46
Оценка:
Здравствуйте, Northrop, Вы писали:
N>В общем, у меня Content-Length: 8075, в FF — Content-Length: 8028.
А сам контент? Сравни всё побайтно — то и меняй.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.