С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/165: Рейтинг темы: голосов - 165, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 23

О этот непонятный multipart/form-data

02.09.2015, 23:02. Показов 31278. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не нашел ни одной темы где бы разъяснили как с ним бороться=)
Вот например у меня при загрузке картинки к товару в интернет магазине отправляется такой POST запрос:

[B]Хидеры:

Сам multipart:


И еще запрос идет вот на такой адрес (он меня немного смущает): http://bike18.nethouse.ru/api/... 816360066f <= можно ли вот эту часть "?X-Progress-ID=cd22f6d3d5591d87c88c6b816360066f" убрать при запросе ?

Помогите, пожалуйста, это для меня очень важная часть для дальнейшего развития
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2015, 23:02
Ответы с готовыми решениями:

HttpWebRequest: ПОСТ-запрос, не формируется multipart/form-data
Добрый ... Есть проблема с формировкой запроса в формате multipart/form-data Сервер не может разбить данные на имена и значения ,то...

Загрузка изображения на сервер (multipart/form-data) с помощью GET-запроса
Потребовалось загрузить картинку GET-запросом и залить её в группу вконтакте: public async Task UploadPhoto(Uri photoUri, int albumIndex)...

POST-запрос multipart/form-data - убрать заголовки содержимого Content-Type
Всем доброго времени суток. private async void SubmitForm(Panel form, string name) { using (var client =...

25
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,851
Записей в блоге: 1
03.09.2015, 00:04
Цитата Сообщение от Serkser Посмотреть сообщение
Не нашел ни одной темы где бы разъяснили как с ним бороться
С ним не надо бороться. Используй WebClient.UploadFile или UploadData.

Цитата Сообщение от Serkser Посмотреть сообщение
можно ли вот эту часть "?X-Progress-ID=cd22f6d3d5591d87c88c6b816360066f" убрать при запросе ?
Это можно выяснить только путем эксперимента. Убери и посмотри что будет.
0
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 23
03.09.2015, 10:21  [ТС]
Был бы очень признателен если бы вы расписали метод, например, WebClient.UploadFile для моего случая, плз =)
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,851
Записей в блоге: 1
03.09.2015, 10:24
C#
1
2
WebClient http = new WebClient();
http.UploadFile("http://bike18.nethouse.ru/api/images/upload?X-Progress-ID=cd22f6d3d5591d87c88c6b816360066f", @"c:\path\to\file.jpg");
0
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 23
03.09.2015, 10:37  [ТС]
А как передать параметры iImageType=4, iObjectId = 16242714 и id= 44012208
Для сайта это сигналы что картинка загружается на превью (iImageType=4), id товара (iObjectId = 16242714), и id картинки, которую мы заменяем (id= 44012208), все эти параметры в сниффере передаются мультипартом
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,851
Записей в блоге: 1
03.09.2015, 11:10
Serkser, я поторопился с ответом. WebClient не поддерживает multipart/form-data, но добрые люди написали решения - раз, два. Если у тебя .NET 4.5, то можно использовать класс HttpClient. Вот пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var requestParameters = new List<KeyValuePair<string, string>>() {
    new KeyValuePair<string,string>("iImageType", "4"),
    new KeyValuePair<string,string>("iObjectId", "16242714"),
    new KeyValuePair<string,string>("id", "44012208")
};
string fileToUpload = @"c:\path\to\file.jpg";
 
var client = new HttpClient();
var content = new MultipartFormDataContent();
content.Add(new FormUrlEncodedContent(requestParameters));
using (var fstream = File.OpenRead(fileToUpload))
{
    var streamContent = new StreamContent(fstream);
    streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") {
        Name = "uploadfile"
        , FileName = Path.GetFileName(fileToUpload)
    };
    content.Add(streamContent);
    
    HttpResponseMessage response = await client.PostAsync("http://bike18.nethouse.ru/api/images/upload?X-Progress-ID=cd22f6d3d5591d87c88c6b816360066f", content);
}
0
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 23
03.09.2015, 11:41  [ТС]
Спасибо конечно, но ничего не происходит))
Код отрабатывает, а изменений на сайте нет (

Может вам доступ к сайту дать, чтобы вы сами попробовали?
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
03.09.2015, 12:46
Serkser, а useragent,referer,cookie,content-type добавили?
0
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 23
03.09.2015, 12:50  [ТС]
Вот так выглядит у меня весь метод

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 public async void upload()
        {
 
            string Parameters = "login=тутлогин&password=тутпароль&quick_expire=0&submit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8";
 
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://nethouse.ru/signin");
            req.Proxy = new System.Net.WebProxy(ProxyString, true);
            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = "POST";
            req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174";
            req.CookieContainer = new CookieContainer();
            byte[] bytes = Encoding.ASCII.GetBytes(Parameters);
            req.ContentLength = bytes.Length;
            Stream os = req.GetRequestStream(); // создаем поток 
            os.Write(bytes, 0, bytes.Length); // отправляем в сокет 
            os.Close();
            WebResponse resp = req.GetResponse();
 
            StreamReader sr = new StreamReader(resp.GetResponseStream());
            string test = sr.ReadToEnd();
 
 
            var requestParameters = new List<KeyValuePair<string, string>>() {
    new KeyValuePair<string,string>("iImageType", "4"),
    new KeyValuePair<string,string>("iObjectId", "16242714"),
    new KeyValuePair<string,string>("id", "44012208")
};
            string fileToUpload = @"C:\Users\1\Desktop\Для bike18\Картинки ирбис\Картинки\4610014479912.jpg";
 
            var client = new HttpClient();
            var content = new MultipartFormDataContent();
            content.Add(new FormUrlEncodedContent(requestParameters));
            using (var fstream = File.OpenRead(fileToUpload))
            {
                var streamContent = new StreamContent(fstream);
                streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "uploadfile"
                    ,
                    FileName = Path.GetFileName(fileToUpload)
                };
                content.Add(streamContent);
 
                HttpResponseMessage response = await client.PostAsync("http://bike18.nethouse.ru/api/images/upload", content);
                
            }
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
03.09.2015, 13:01
Serkser, ну вот. Вы в ваш HttpClient, который файл отправляет ни куки не передаете, ни хедеры не устанавливаете. Естесственно ничего не проиходит
0
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 23
03.09.2015, 13:50  [ТС]
Добавил заголовки, но ничего не поменялось(

C#
1
2
3
4
5
6
7
8
9
client.DefaultRequestHeaders.Add("Host", "bike18.nethouse.ru");
            client.DefaultRequestHeaders.Add("UserAgent", "Mozilla / 5.0(Windows NT 6.3; WOW64; rv: 40.0) Gecko / 20100101 Firefox / 40.0");
            client.DefaultRequestHeaders.Add("Accept", @"text/html, application/xhtml+xml, application/xml; q=0.9,*/*;q=0.8");
            client.DefaultRequestHeaders.Add("AcceptLanguage", "ru - RU,ru; q = 0.8,en - US; q = 0.5,en; q = 0.3");
            client.DefaultRequestHeaders.Add("AcceptEncoding", "gzip, deflate");
            client.DefaultRequestHeaders.Add("Referer", "http://bike18.nethouse.ru/products/13895740");
            client.DefaultRequestHeaders.Add("Connection", "keep-alive");
            client.DefaultRequestHeaders.Add("ContentType", "multipart / form - data; boundary =7799258061195");
            client.DefaultRequestHeaders.Add("ContentLength", "60881");
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
03.09.2015, 14:34
Вот это уберите:

C#
1
2
3
4
    client.DefaultRequestHeaders.Add("Connection", "keep-alive");
            client.DefaultRequestHeaders.Add("ContentType", "multipart / form - data; boundary =7799258061195");
            client.DefaultRequestHeaders.Add("ContentLength", "60881");
client.DefaultRequestHeaders.Add("Host", "bike18.nethouse.ru");
0
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 23
03.09.2015, 14:47  [ТС]
Убрал, все так же...
Тут явно что то не то, если не лень можете сами попробовать
Сайт: nethouse.ru
Логин: testAvtomatizacii
Пароль: qwerty12345

Слева выбираете Каталог товаров, в нем выбираете любую позицию, там справа повыше есть кнопка редактировать, жмете на нее и открывается редактор позиции, в нем то и можно загрузить картинку к товару
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
03.09.2015, 15:04
Serkser, установите сниффер и сверьте то, что отправляется в браузере и через программу.
0
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 23
03.09.2015, 15:07  [ТС]
Парадокс в том что фидлер вообще не видит этот запрос, чарлес мультипарт не показывает, только плагин на файрфоксе все отображает вот по нему я и ориентируюсь)
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
03.09.2015, 15:53
Serkser, плагин это конечно хорошо, но сниффер лучше.
Вам надо видеть, что отправляет программа на C#. Иначе вы долго будете выяснять в чем проблема.
1
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 23
03.09.2015, 16:03  [ТС]
аааа, я понял тебя. Да, спасибо, теперь еще на шаг ближе к победе, от оказывается что возвращает сервер
HTML5
1
2
3
4
5
6
7
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>
403 - это я так понимаю сервер палит что мы обходим интерфейс. Либо просто куки после авторизации не приклеиваются к этому запросу, можете посмотреть что с авторизацией не так?

Весь код метода:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public async void upload()
        {
 
            string Parameters = "login=логин&password=парольu&quick_expire=0&submit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8";
 
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://nethouse.ru/signin");
            //req.Proxy = new System.Net.WebProxy(ProxyString, true);
            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = "POST";
            req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174";
            req.CookieContainer = new CookieContainer();
            byte[] bytes = Encoding.ASCII.GetBytes(Parameters);
            req.ContentLength = bytes.Length;
            Stream os = req.GetRequestStream(); // создаем поток 
            os.Write(bytes, 0, bytes.Length); // отправляем в сокет 
            os.Close();
            WebResponse resp = req.GetResponse();
 
            StreamReader sr = new StreamReader(resp.GetResponseStream());
            string test = sr.ReadToEnd();
 
 
            var requestParameters = new List<KeyValuePair<string, string>>() {
    new KeyValuePair<string,string>("iImageType", "4"),
    new KeyValuePair<string,string>("iObjectId", "16242714"),
    new KeyValuePair<string,string>("id", "44012208")
};
            string fileToUpload = @"C:\Users\1\Desktop\Для bike18\Картинки ирбис\Картинки\4610014479912.jpg";
 
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("UserAgent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174");
            client.DefaultRequestHeaders.Add("Accept", @"text/html, application/xhtml+xml, application/xml; q=0.9,*/*;q=0.8");
            client.DefaultRequestHeaders.Add("AcceptLanguage", "ru - RU,ru; q = 0.8,en - US; q = 0.5,en; q = 0.3");
            client.DefaultRequestHeaders.Add("AcceptEncoding", "gzip, deflate");
            client.DefaultRequestHeaders.Add("Referer", "http://bike18.nethouse.ru/products/13895740");
              var content = new MultipartFormDataContent();
            content.Add(new FormUrlEncodedContent(requestParameters));
            using (var fstream = File.OpenRead(fileToUpload))
            {
                var streamContent = new StreamContent(fstream);
                streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "uploadfile"
                    ,
                    FileName = Path.GetFileName(fileToUpload)
                };
                content.Add(streamContent);
 
                HttpResponseMessage response = await client.PostAsync("http://bike18.nethouse.ru/api/images/upload", content);
                
            }
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
03.09.2015, 16:28
Serkser, могу только теоретически подсказать.

Вам надо достать Cookie из тех, которые получили в WebRequest и вставить их в client.DefaultRequestHeaders.Add("Cookie ", ..... )
0
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 23
06.09.2015, 09:15  [ТС]
Так у меня и не получилось зацепить куки из resp , как это делается?)
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
06.09.2015, 09:46
А как вы пытаетесь? Покажите. Как тут пробовали?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.09.2015, 09:46
Помогаю со студенческими работами здесь

Curl --header 'Content-Type: multipart/form-data' -X POST --form filename=@lib.dll
Здравствуйте коллеги! Хорошего дня! Windows 10 CMD curl --header 'Content-Type: multipart/form-data' -X POST --form...

multipart form data
Если готовая библиотека которая облегчает создание multipart/form data ??

XmlHttpRequest. multipart/form-data
Доброго дня всем. Отправка файла на сервер с помощью XmlHttpRequest вызвала у меня недоумение. По идее, чтобы серверный код мог...

Multipart/form-data vk api
vk api загрузка файлов на сервер (загрузка фото на стену) - ошибка Security Breach2 помогите разобраться... 1.0 запрос...

Проблемы с enctype=multipart/form-data
PHP Version 4.1.2 не передаются глобальные переменные из формы в форму. убераешь enctype=multipart/form-data, передаются. но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru