[РЕШЕНО] Как отправить C# Post Запрос + Изображение в multipart форме?

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 521
Благодарностей
1 319
Баллы
113
Доброго времени. Никак не могу освоить тему отправки C# Post Запрос + Изображение - multipart

Взял за пример снипет из темы. Что здесь не так? Пытаюсь отправить картинку на решение рукапчи методом multipart
C#:
var pathImg = @"D:\captchaimg.png";

var userAgent = project.Profile.UserAgent;
var proxy = string.Empty;
var nameImg = Path.GetFileNameWithoutExtension(pathImg);
var rnd = ZennoLab.Macros.TextProcessing.RandomText(16, "dc");

var url = "http://rucaptcha.com/in.php";

var content = $"------WebKitFormBoundary{rnd}\r\n" +
    $"Content-Disposition: form-data; name=\"file\"; filename=\"{nameImg}\"\r\n" +
    $"Content-Type: image/png\r\n\r\n" +
    $"key: \"a0b0e6db1ab35ab1893ba\"\r\n" +
    $"method: \"post\"\r\n" +
    $"{pathImg}\r\n" +
    $"------WebKitFormBoundary{rnd}--";

var resp = ZennoPoster.HTTP.Request
(
    method: ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.POST,
    UserAgent: userAgent,
    proxy: proxy,
    url: url,
    content: content,
    contentPostingType: $"multipart/form-data; boundary=----WebKitFormBoundary{rnd}",
    Encoding: "utf-8",
    respType: ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    Timeout: 30000,
    UseRedirect: true, MaxRedirectCount: 5,
    AdditionalHeaders: new[] { "" },
    cookieContainer: project.Profile.CookieContainer
);

return resp;
Получаю ответ:
Выполнение действия CSharp OwnCode: TEST CAPTCHA. File not found exception: key: a0b0e6db1a
method: post
D:\captchaimg.png
Подскажите, пожалуйста, корректный снипет отправки C# Post Запрос + Изображение в multipart виде И как корректно вставить apikey, а то по идее не туда вставил. Инструкцию за пример взял рукапчу, как раз то что нужно для старта решить и понять корректность метода.
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
возьми форму из примера, выполни в браузере зенки и в мониторе трафика увидишь ушедший запрос. повторить его наверно не составит труда.

а вообще они в формате JSON принимают данные.
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 521
Благодарностей
1 319
Баллы
113
возьми форму из примера, выполни в браузере зенки и в мониторе трафика увидишь ушедший запрос. повторить его наверно не составит труда.

а вообще они в формате JSON принимают данные.
1. Повторил форму - она там никак не multipart вышла, а что-то непонятное.
102772
2. Решить рукапчу на json - я решаю, нужен метод именно через multipart + понимание как вставить apikey туда. Так как даже зенно кубик Post запроса - выдает ошибку, что не верный api-key, т.е. не верно его вставил, так как ключ точно рабочий.
102773
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
фиг знает, поставил их форму в браузер зенки, отправил капчу, скопировал запрос из монитора трафика и все работает :bk:

102774
 
  • Спасибо
Реакции: Gunjubasik

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 521
Благодарностей
1 319
Баллы
113
Вот на кубике пока пытаюсь отправить фото, но пишет что картинка меньше 100 байт, хотя картинка 11кб...Значит путь не по стандартному нужно указывать? А то уже сверил путь и картинка 11кб открывается по данному пути:
102775

А, кавычки лишние, понял...Осталось только на C# переделать.
 
Последнее редактирование:

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 521
Благодарностей
1 319
Баллы
113

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 521
Благодарностей
1 319
Баллы
113
Кто-то видит где здесь ошибка?

C#:
var rnd = ZennoLab.Macros.TextProcessing.RandomText(16, "dc");

var url = "http://rucaptcha.com/in.php";


/// --------------------

var content2 = "------WebKitFormBoundary" + rnd + "" + "\n" +

"Content-Disposition: form-data; name=\"method\"" + "\n\n" +
"post" + "\n" +

"------WebKitFormBoundary" + rnd + "" + "\n" +

"Content-Disposition: form-data; name=\"key\"" + "\n\n" +
project.Variables["RecognitionResult1"].Value + "\n" +

"------WebKitFormBoundary" + rnd + "" + "\n" +
"Content-Disposition: form-data; name=\"file\"; filename=\"1.png\"; Content-Type= image/png " + "\n\n" +
project.Variables["Variable0"].Value;

/// --------------------

//return content;

var resp = ZennoPoster.HTTP.Request
(
    method: ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.POST,
    url: "http://rucaptcha.com/in.php",
    content: content2,
    contentPostingType: "multipart/form-data; boundary=----WebKitFormBoundary" + rnd + "",
    Encoding: "utf-8",
    respType: ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    Timeout: 30000,
    Cookies: string.Empty,
    UseRedirect: false,
    MaxRedirectCount: 0,
    AdditionalHeaders: new []
    {
        "Referer: rucaptcha.com"
    }
);

return resp;
В content2 получается такой текст:
------WebKitFormBoundaryEyIr5LayarLhVkA9
Content-Disposition: form-data; name="method"

post
------WebKitFormBoundaryEyIr5LayarLhVkA9
Content-Disposition: form-data; name="key"

a0b0e6db1ab35ab1893
------WebKitFormBoundaryEyIr5LayarLhVkA9
Content-Disposition: form-data; name="file"; filename="1.png"; Content-Type= image/png

D:\1.png
Ошибка лезет:
Выполнение действия CSharp OwnCode. Unexpected end of stream
На сколько я понимаю, ошибка означает, что не верно сложен формат POST запроса, я уже проверил с образцами по форуму и не могу найти проблем. Возможно в content2 разделители такие нельзя или что это может такое быть?
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 521
Благодарностей
1 319
Баллы
113

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