С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
White___Light
0 / 0 / 0
Регистрация: 17.08.2014
Сообщений: 3
1

Http POST отправка файла в теле запроса

17.08.2014, 18:20. Просмотров 2917. Ответов 5
Метки нет (Все метки)

Всем привет!
Пытаюсь отправить файл на сервер, но со стороны сервера мне говорят, что нужно отправлять файл в теле запроса, не пойму как это реализовать

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
            WebRequest wr;
            wr = WebRequest.Create("http://____/");
            wr.Method = "POST";
            wr.ContentType = "_______";
            byte[] byteArray = File.ReadAllBytes(fileName);
            wr.ContentLength = byteArray.Length;
         
 
            Stream dataStream = wr.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
 
            var response = ((HttpWebResponse)wr.GetResponse()).GetResponseStream();
 
            StreamReader reader = new StreamReader(response);
 
            string responseFromServer = reader.ReadToEnd();
 
            reader.Close();
 
            response.Close();
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2014, 18:20
Ответы с готовыми решениями:

Отправка post-запроса С#
Доброго времени суток всем! Пытаюсь отправить пост-запрос на сайт. По идее в...

Отправка POST запроса
Мне необходимо сделать ПО для авторегистрации на одном из сайтов. Делаю...

Отправка POST запроса
Прошу помощи, срочно !!! Нужно отправить POST запрос сайту, но POST запрос...

Отправка Post запроса (игра vk)
Подскажет кто где найти метод шифрования данных в игре Вконтакте дота 2: пудж а...

Отправка POST запроса и получение куки
Стоит задача залогиниться на сайте https://lk2.service.nalog.ru/lk/index.html,...

5
Butter
Заблокирован
18.08.2014, 00:53 2
Лучший ответ Сообщение было отмечено White___Light как решение

Решение

Я лично мучался над этим тоже долго часов 5 точно по незнанию как это делать вы можете воспользоватся библиотекой xNet или же стандартной. Вот пример из стандартной.

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
 public string UploadTxTFile(string scrFileName,string fullpath)
        {
            StringBuilder sb = new StringBuilder();
 
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name=\"X-Client-Version\"");
            sb.AppendLine("");
            sb.AppendLine("");
            sb.AppendLine("1.0.00");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name=\"X-Client-Type\"");
            sb.AppendLine("");
            sb.AppendLine("API");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name=\"X-Api-Version\"");
            sb.AppendLine("");
            sb.AppendLine("1.0");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name=\"X-Authorization\"");
            sb.AppendLine("");
            sb.AppendLine(ATU);
            sb.AppendLine("");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name=\"Accept\"");
            sb.AppendLine("");
            sb.AppendLine("application/json");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name=\"file\"; filename=\""+scrFileName+"\"");
            sb.AppendLine("Content-Type: application/octet-stream");
            sb.AppendLine("");
 
            byte[] nach = Encoding.ASCII.GetBytes(sb.ToString());
            byte[] str = File.ReadAllBytes(fullpath);
            byte[] stri = Encoding.ASCII.GetBytes(Environment.NewLine);
            byte[] str2 = Encoding.ASCII.GetBytes("------WebKitFormBoundaryFQyoiBAmgWBjjIyg--");
          
            
 
 
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.copy.com/api/rest/meta/copy");
            request.CookieContainer = new CookieContainer();
            request.Accept = "application/json";
            request.ServicePoint.Expect100Continue = false;
            request.Referer = "https://www.copy.com/browse/copy";
            request.ContentType = "multipart/form-data; boundary=----WebKitFormBoundaryFQyoiBAmgWBjjIyg";
            request.UserAgent = " Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36";
            request.AllowAutoRedirect = true;
          //  request.Proxy = new WebProxy("84.27.75.236:39460");
            request.Host = "www.copy.com";
            request.KeepAlive = true;
           
            request.Headers.Add("X-Requested-With: XMLHttpRequest");
           
            request.Headers.Add("X-Api-Version: 1.0");
            request.Headers.Add("X-Client-Version: 1.0.00");
            request.Headers.Add("X-Authorization: "+ATU);
            request.Headers.Add("X-Client-Type: API");
            request.Headers.Add("Accept-Encoding: gzip,deflate,sdch");
            request.Headers.Add("Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
 
 
            if ((Cooks != null))
            {
                request.CookieContainer.Add(Cooks);
            }
 
            request.Method = "POST";
 
            request.ContentLength = nach.Length + str.Length + str2.Length + stri.Length;
            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(nach, 0, nach.Length);
                requestStream.Write(str, 0, str.Length);
                requestStream.Write(stri, 0, stri.Length);
                requestStream.Write(str2, 0, str2.Length);
                requestStream.Close();
            }
            try
            {
 
 
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);
                    if (response.Cookies != null)
                    {
                        Cooks.Add(response.Cookies);
                    }
 
                    return getLink(scrFileName);
                }
            }
            catch (WebException)
            {
                return "";
            }
 
        }
Не самый красивый код но какой есть) 100% рабочий.
2
White___Light
0 / 0 / 0
Регистрация: 17.08.2014
Сообщений: 3
18.08.2014, 09:24  [ТС] 3
Спасибо, вечером перепишу код под себя и попробую, надеюсь заработает.
0
Butter
Заблокирован
18.08.2014, 18:51 4
Вам просто разделители правильно засунуть в запрос и будет вам счастье
0
White___Light
0 / 0 / 0
Регистрация: 17.08.2014
Сообщений: 3
18.08.2014, 23:27  [ТС] 5
Ну так вот код который я использую, как его переписать надо не подскажите?)

Добавлено через 40 минут
Butter, Спасибо! После танцев с бубном поправил код под себя)))
0
Butter
Заблокирован
19.08.2014, 08:55 6
Достаточно было через Fidler посмотреть как отправляется запрос сделать разделители и добавить параметры
0
19.08.2014, 08:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 08:55

Отправка POST запроса и получение ответа
Есть проблема. Нужно отправить на сайт POST запрос и в зависимости от этого...

Отправка POST-запроса авторизации, и клики по сайту
Здравствуйте дорогие форумчане, мне нужно программно авторизоваться на сайте...

Разделение login:pass и отправка post запроса
Я все пытаюсь понять как нормально брать файлы login:pass из файла и потом уже...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru