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

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

17.08.2014, 18:20. Просмотров 3856. Ответов 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)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2014, 18:20
Ответы с готовыми решениями:

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

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

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

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

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

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
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 08:55

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

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

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


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

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

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