Прошу помощи, пытаюсь отправить post multipart запрос с картинкой, отправляю в инстаграм для смены аватарки. Ответ от сервера правильный, такой же как и при изменении аватарки с браузера, вот только программа меняет аватарку на пустую, при сравнении запросов в браузере и в программе видно что в том месте где должна быть картинка, те между границами(boundary) текст короче в программе, в браузере Content-Length 102920 в программе Content-Length: 17402.
string updateava()
{
string boundary = DateTime.Now.Ticks.ToString();
byte[] bytes = File.ReadAllBytes(@"C:\Users\Admin\Downloads\kartinki\Famous Numbers - Euler Constant.JPG");
textBox1.Text = bytes.Length.ToString();
string data = "-----------------------------" + boundary + "\n" + "Content-Disposition: form-data; name=\"profile_pic\"; filename=\"profilepic.jpg\" +\n" + "Content-Type: image/jpeg \n \n";
string dataend = $"\n-----------------------------{boundary}--";
byte[] Data = Encoding.UTF8.GetBytes(data);
byte[] Dataend = Encoding.UTF8.GetBytes(dataend);
//https://www.instagram.com/accounts/web_change_profile_picture/
string site = "https://www.instagram.com/accounts/web_change_profile_picture/";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(site);
request.Method = "POST";
request.Accept = "*/*";
request.ContentLength = Data.Length+Dataend.Length+bytes.Length;
request.ContentType = "multipart/form-data; boundary=---------------------------" + boundary;
request.Headers.Add("Origin: https://www.instagram.com");
request.Headers.Add("TE: Trailers");
request.Referer = "https://www.instagram.com/";
request.Headers.Add("accept-encoding: gzip, deflate, br");
request.Headers.Add("accept-language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
request.Headers.Add("DNT: 1");
request.Headers.Add($"cookie: {defaultcookie}");
request.Headers.Add("X-Requested-With: XMLHttpRequest");
request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip | DecompressionMethods.All;
request.Headers.Add("X-IG-WWW-Claim: 0");
request.Headers.Add($"X-IG-App-ID: {Gxigappid}");
request.Headers.Add($"X-Instagram-AJAX: {Gxinstagramajax}");
request.Headers.Add($"X-CSRFToken: {xcsrftokens}");
request.Headers.Add($"X-IG-WWW-Claim: {xigsetwwwclaim}");
request.UserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25";
using (Stream stream = request.GetRequestStream())
{
stream.Write(Data, 0, Data.Length);
stream.Write(bytes, 0, bytes.Length);
//stream.Write(bytes);
stream.Write(Dataend, 0, Dataend.Length);
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
string header = response.Headers.ToString();
string responsestr = stream.ReadToEnd();
string Path1 = @"C:\Users\Admin\Desktop\C#\7.txt";
using (StreamWriter stream1 = new StreamWriter(Path1, true))
{
stream1.WriteLine(header);
stream1.WriteLine("");
stream1.WriteLine(responsestr);
}
}
}
return "";
}
В запросах, в месте где картинка, дикие крякозябры (Это с браузера, начальный кусочек)
Content-Disposition: form-data; name="profile_pic"; filename="profilepic.jpg"
Content-Type: image/png
PNG
���
IHDR��g��g���]ÐcF���sRGB�®Îé���gAMA��±üa��� pHYs��Ã��ÃÇo¨d��ÿ¥IDATx^ì½ ^E¹î?³ê×wïõÛ_ݽ÷^ÒH t¤£à(*¨ØÀ£H=½P¤ * U ´ÐHB
é¢sϽÿ{
ÿÏ;3ûË.IÜvÈNæÉÚó5kfÖ¬Yï3ïªLsPÂ5ÎUo!¨Jk406lPýUs¡ö°æÐFõª´Fs�£Uó EíaÍ¡ê
3Uiæ�F«æAÚÃCÕfªÒÍV͵56ª7ÌT¥5-jkmTo!¨Jk40Z5ZÔÖÚ¨Þ0CPÖh`´j´¨=¬9´Q½a *ÑÀhÕ©¨¨ÑÌTÇ~TyÍô Us¦¢v F3CPwúQåi4ÓVÍÚÍAuÜéG§ÑLZ5g*jj43Õq§UF3=hÕ©¨¨ÑÌTÇ~TyÍô Us¦¢v F3CPwúQåi4ÓVÍÚÍAuÜéG§ÑLZ5tÔÒhf8ªCOB-Z6eÔjP÷J§ÑL:jGi43Õ¡'¡G-2jµñ¨e{E%Õh¦V͵£4êÐPÇ£MµÚxÔ²½¢
HttpWebRequest, он устарел! Во вторых, вы делаете очень много лишнего, я на 100% уверен, что 90% заголовков, которые вы шлете - банальный мусор, выделите только необходимые данные и их отправляйте (об этом я писал тут). У вас должно быть нечто, похожее на это. Ну и напоследок, почему не API? Сейчас у вас костыль... – EvgeniyZ Jan 25 '20 at 13:17Base64? – Bulson Jan 25 '20 at 13:20