.NET 4.x POST запрос и Fiddler - C#
Формулировка задачи:
Здравствуйте ув. форумчани.
Суть в том, что бы загрузить изображение в vk с помощью их api. Получилось и загрузить и запостить изображение. Но есть проблема.
Проблема заключается в отправке POST запроса и получении ответа на этапе загрузки картинки на сервер.
Код метода POST:
При включенном Fiddler:
отправляется запрос и приходит ответ (см. рис. 1)При выключенном Fiddler:
отправляется запрос но ответ приходит не полный (см. рис. 2). Есть предположения, что картинка не отправляется. Но это только предположения. В поиске решения данной проблемы нашел пару советов, но ни один не помог. тык бзды - тут описаны разного рода решений. Но не помогло. Код вызова метода POST:
Листинг программы
- result = POSTImage(url, @"pu.vk.com", @"at362396083.jpg", "image/jpeg", @"D:\Downloads\at362396083.jpg", true, true, @"*/*", null, cookie); //@"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
- MessageBox.Show(result);
- obj = Newtonsoft.Json.Linq.JObject.Parse(result);
- photo = obj["photo"].ToString();
- server = obj["server"].ToString();
- hash = obj["hash"].ToString();
Листинг программы
- public string POSTImage(string uri, string Host, string FileName, string TypeImage, string PathToImage, bool KeepAlive, bool AllowAutoRedirect, string Accept, string Referer, CookieContainer cookiecontainer)
- {
- string otv;
- Random rand = new Random();
- string _boundary = String.Format("--{0}", GetMD5(rand.Next(100, 999).ToString()));
- //MessageBox.Show(_boundary);
- string _contentType = String.Format("multipart/form-data; boundary={0}", _boundary);
- string _templateFile = String.Format("--{0}\r\nContent-Disposition: form-data; name="{1}"; filename="{2}"\r\nContent-Type: {3}\r\n\r\n", _boundary, "file", FileName, TypeImage);
- //MessageBox.Show(_templateFile);
- string _templateEnd = String.Format("--{0}--\r\n\r\n", _boundary);
- //MessageBox.Show(_templateEnd);
- byte[] _lineFeed = Encoding.UTF8.GetBytes("\r\n");
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
- request.Method = "POST";
- request.Host = Host;
- //request.Timeout = 100000;
- //request.Headers.Add("X-Requested-With: XMLHttpRequest");
- byte[] sendData = File.ReadAllBytes(PathToImage);
- byte[] headsendData = Encoding.UTF8.GetBytes(_templateFile);
- byte[] endsendData = Encoding.UTF8.GetBytes(_templateEnd);
- request.ContentLength = sendData.Length + headsendData.Length + endsendData.Length + _lineFeed.Length;
- //MessageBox.Show(request.ContentLength.ToString());
- request.ContentType = _contentType;
- request.CookieContainer = cookiecontainer;
- request.KeepAlive = KeepAlive;
- request.AllowAutoRedirect = AllowAutoRedirect;
- request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36";
- request.Accept = Accept;
- request.Referer = Referer;
- Stream sendStream = request.GetRequestStream();
- sendStream.Write(headsendData, 0, headsendData.Length);
- //System.Threading.Thread.Sleep(1000);
- sendStream.Write(sendData, 0, sendData.Length);
- //System.Threading.Thread.Sleep(1000);
- sendStream.Write(_lineFeed, 0, _lineFeed.Length);
- //System.Threading.Thread.Sleep(1000);
- sendStream.Write(endsendData, 0, endsendData.Length);
- sendStream.Close();
- HttpWebResponse response = (HttpWebResponse)request.GetResponse();
- StreamReader streamr = new StreamReader(response.GetResponseStream());
- otv = streamr.ReadToEnd();
- streamr.Close();
- response.Close();
- return otv;
- }
P.S.
Знаю, что httpwebrequest и httpwebresposne устарели, но желания отказываться от них нет.P.S.S.
Если необходимо больше кода, то готов предоставить. Супер секретного ничего нет. Но проблема происходит именно в данной части.Решение задачи: «.NET 4.x POST запрос и Fiddler»
textual
Листинг программы
- POSTImage(url, @"at362396083.jpg", "image/jpeg", @"D:\Downloads\at362396083.jpg");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д