httpClient вопрос

Shevassa

Client
Регистрация
24.01.2011
Сообщения
57
Благодарностей
30
Баллы
18
Всем привет, столкнулся с проблемой, нужно передать запрос к wildberries, запрос заливки картинки отзыва, выглядит он так

Content-Disposition: form-data; name="request"; filename="blob"
Content-Type: application/json

json
------WebKitFormBoundary3ZA5SG3LB1ArNRE5
Content-Disposition: form-data; name="image"; filename="blob"
Content-Type: image/png

картинка
------WebKitFormBoundary3ZA5SG3LB1ArNRE5--


Казалось бы ничего сложного, но проблема в том, что через кубик запрос коверкается, обрубает Content-Type где не надо или вообще делает какую-то отсебятину, сделал на C# через метод ZennoPoster.HTTP.Request, но там он поступает аналогично. Специально даже сохранял в переменную данные перед отправкой и через burpsuite снифал инфу, которую он реально отправил, они не совпадают. Уже откровенно злить начинает, что он коверкает совершенно конкретные мои данные, а я не могу залезть глубже в него и запретить ему это делать...

В итоге переделал на httpClient, всё получилось, но в итоге споткнулся на том, что не хочет работать с прокси вообще ни с какими, даже с локальными. По итогу на родных кубиках и C# от зенно работают прокси, но не работают сами запросы, а на System.Net работает запрос как надо, но не работают прокси. Я думаю не только я сталкивался с тем, что зенно искажает запрос, надеюсь на помощь. У кого-то получилось подружить httpClient и socks5 прокси или вообще хотя бы обычные, у меня даже локальные не работают?

Код сейчас выглядит примерно так. Прокси пытался подключать разными способами, в итоге получаю просто "При выполнении произошла одна или несколько ошибок"
C#:
var purchaseDetailsJson = "json данные";

var imagePath = @"Путь к картинке"; // Замените на путь к вашему изображению
Image newImage = Image.FromFile(imagePath);
ImageConverter _imageConverter = new ImageConverter();
byte[] paramFileStream = (byte[])_imageConverter.ConvertTo(newImage, typeof(byte[]));
var httpClientHandler = new HttpClientHandler
{
    Proxy   = new WebProxy(Address: "http://192.168.0.105:8080"),
//Address = new Uri("http://192.168.0.105:8080")
    UseCookies = false,
    UseProxy = true,
    PreAuthenticate = false,
};
var httpClient = new HttpClient(httpClientHandler);

    httpClient.DefaultRequestHeaders.Add("Заголовок 1");
    httpClient.DefaultRequestHeaders.Add("Заголовок 2");
    httpClient.DefaultRequestHeaders.Add("Заголовок 3");


    using (var formData = new MultipartFormDataContent())
    {
        // Добавление JSON в форму
        var jsonContent = new StringContent(purchaseDetailsJson, Encoding.UTF8, "application/json");
        jsonContent.Headers.Add("Content-Disposition", "form-data; name=\"request\"; filename=\"blob\"");
        formData.Add(jsonContent);
  
        var imageStream = new StreamContent(new MemoryStream(paramFileStream));
        imageStream.Headers.Add("Content-Type", "image/png");
        imageStream.Headers.Add("Content-Disposition", "form-data; name=\"image\"; filename=\"blob\"");
        formData.Add(imageStream);


        // Отправка POST-запроса
        var response = httpClient.PostAsync("https://feedbacks3-api.wb.ru/api/user/feedback/photos/v1", formData);

    //return response.Result.RequestMessage.Content.ReadAsStringAsync().Result;
        return response.Result.Content.ReadAsStringAsync().Result;
    }
 
Последнее редактирование:

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
224
Благодарностей
60
Баллы
28
Я конечно ни бум бум в этом... Но... Разве не странно, вызывать асинхрон и тут же возвращать результат не дождавшись завершения его работы ?
Тут к бабке не ходи, сразу будет ошибка.
 

Shevassa

Client
Регистрация
24.01.2011
Сообщения
57
Благодарностей
30
Баллы
18
Я конечно ни бум бум в этом... Но... Разве не странно, вызывать асинхрон и тут же возвращать результат не дождавшись завершения его работы ?
Тут к бабке не ходи, сразу будет ошибка.
Тут согласен, но почему-то когда пишешь с await, то ошибка вылетает, что применяется только к асинхронным методам, хотя куда асинхроннее ещё. Без прокси, кстати, ошибки нет, спрокси убрал возвращение результата, но запрос не ушёл всё равно. Может кто-то подскажет заодно как сделать, чтобы await работал нормально в данном примере? Я так понимаю там сам метод почему-то не асинхронный в библиотеке, которая с зенкой идёт System.Net
P.S Мне на самом деле асинхронность эта и не нужна, просто так все методы асинхронные, у меня там в 1 поток просто запрос по факту идёт.
 
Последнее редактирование:

Shevassa

Client
Регистрация
24.01.2011
Сообщения
57
Благодарностей
30
Баллы
18
Похоже, сделал, но только на http прокси, socks5 в данной версии C# и библиотеки не светит, видимо, но лучше, чем ничего
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 346
Благодарностей
910
Баллы
113
Я конечно ни бум бум в этом... Но... Разве не странно, вызывать асинхрон и тут же возвращать результат не дождавшись завершения его работы ?
Тут к бабке не ходи, сразу будет ошибка.
Result ожидает завершение работы асинхронного метода и возвращает результат его работы
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
Используйте альтернативные запросы или сразу curl.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)