1

Искал пробовал\пробовал информацию в интернете, получал одни ошибки. Нужно отправить POST запрос с параметрами, одним из параметров передать картинку.

Мой код:

var baseAddress = new Uri("domain.com");

using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) { var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("avtoriz_user_adv", "off"), new KeyValuePair<string, string>("name_adv", Title), new KeyValuePair<string, string>("text_adv", Msg), new KeyValuePair<string, string>("key_words", ""), new KeyValuePair<string, string>("time_adv", "month"), new KeyValuePair<string, string>("img_adv[]", "(binary)"), new KeyValuePair<string, string>("imagesValue", "ТУТ ДОЛЖНА БЫТЬ КАРТИНКА.JPG"), new KeyValuePair<string, string>("captcha", getCaptcha(convertIMG.Base64ToImage(photobytes))), new KeyValuePair<string, string>("PHPSESSID", PHPSESSID), new KeyValuePair<string, string>("add_maps", "off"), new KeyValuePair<string, string>("longitude", "0"), new KeyValuePair<string, string>("latitude", "0"), new KeyValuePair<string, string>("is_new_adv", "alkdt"), }); var result = await client.PostAsync("uploadfile_new.php", content); result.EnsureSuccessStatusCode();

return await result.Content.ReadAsStringAsync();

}

Тут должно быть изображение

new KeyValuePair<string, string>("imagesValue", "ТУТ ДОЛЖНА БЫТЬ КАРТИНКА.JPG"),

Изображение нужно передавать как byte[]? KeyValuePair принимает только string.

В примерах что находил изображение передавали на сервер без дополнительных параметров. Как это сделать? Спасибо:)

aepot
  • 49,560
  • Посмотрите внимательно на запрос, который отправляет браузер серверу, а именно какого он типа. – EvgeniyZ Sep 21 '20 at 12:29
  • @EvgeniyZ, Request Method: POST – user54353 Sep 21 '20 at 12:48
  • это не то, смотрите что у вас в ContentType и чему равен этот imagesValue – EvgeniyZ Sep 21 '20 at 12:50
  • Не стоит создавать новый HttpClient на каждый запрос, это может привести к нехватке сокетов. Вместо этого рекомендуется создать один экземпляр HttpClient и переиспользовать его на протяжении всей работы приложения (документация, пример). – aepot Sep 21 '20 at 12:55
  • По поводу самого вопроса - без оригинального запроса, отправляемого браузером, который вы хотите воспроизвести, понять, как оно должно быть, не возможно. Возможна сама картинка энкодится в Base64. – aepot Sep 21 '20 at 12:56
  • Content-Type: text/html; charset=UTF-8 imagesValue: ca8bfd27c2dd46399d03f6b069f62f7c.jpg Вроде понял, сначала GET методом загружается картинка https://rudos.ru/upload_adv/uploads/small_img/ca8bfd27c2dd46399d03f6b069f62f7c.jpg Затем в imagesValue передаётся ca8bfd27c2dd46399d03f6b069f62f7c.jpg – user54353 Sep 21 '20 at 13:02
  • Это похоже на имя файла, а не на картинку. Да, возможно так и есть. – aepot Sep 21 '20 at 13:03
  • @aepot, спасибо за совет:) Запрос к URL: https://rudos.ru/moduls/doska/include/uploadfile_new.php – user54353 Sep 21 '20 at 13:04
  • Только не понимаю откуда берётся "ca8bfd27c2dd46399d03f6b069f62f7c", картинка имеет имя 1.jpg – user54353 Sep 21 '20 at 13:05
  • Вероятно, когда вы ее заливаете на сервер POST запросом, сервер вам как раз возвращает имя файла. – aepot Sep 21 '20 at 13:06
  • 1
    Так и оказалось, спасибо за помощь:) – user54353 Sep 21 '20 at 13:10

0 Answers0