Кто может помочь с загрузкой изображения? - Post BoundaryForm на C#

SHILY

Client
Регистрация
05.06.2016
Сообщения
258
Реакции
309
Баллы
63
Добрый день! Кто может, пожалуйста, помочь?:-)

Суть: Нужно загрузить файл-изображение, через экшен C# (обычным post экшеном - всё оки, но хочу экшеном шарпа научиться для удобства, и, именно зеновской либой, а не xNet:D), но вылетает исключение.

Вот код и не пойму, что здесь не так у меня:(
POST - Boundary:
Развернуть Свернуть Копировать
//POST - запрос загрузки изображения
contentData += "------WebKitFormBoundary" + rand16 + "\n";
contentData += "Content-Disposition: form-data; name=\"image\"; filename=\"" + project.Variables["name_loaded_file"].Value + "\"" + "\n";
contentData += "Content-Type: image/jpeg" + "\n"+"\n";
contentData += project.Variables["put_loaded_img_file_profile"].Value; //путь к файлу

try
{
    resultHttpPost = ZennoPoster.HTTP.Request
    (
        InterfacesLibrary.Enums.Http.HttpMethod.POST,
       "https://avatars.rambler.ru/upload", //url запроса
        contentData, //данные, которые передаем
        "multipart/form-data", //тип данных
        project.Variables["PROXY"].Value, //прокся
        "UTF-8", //кодировка
        ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly, //что получать в ответ
        60000, //таймаут ожидания ответа
        "", //куки
        project.Profile.UserAgent, //юзерагент
        true, //разрешить редирект
        5, //количество редиректов
        new String[]
        {
            //дополнительные заголовки запроса
            "Accept: */*",
            "Accept-Encoding: gzip, deflate, br",
            "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
            "Referer: https://id.rambler.ru/account/profile",
            "Origin: https://id.rambler.ru",
            "Connection: keep-alive"
        },
        "", //путь, куда качаем файл
        false, //использовать оригенальный url
        false,
        project.Profile.CookieContainer //контейнер куков
    );
    project.Variables["loadImgResp"].Value = resultHttpPost;
}
catch
{
    project.SendWarningToLog("[" + project.Variables["AccountFull"].Value + "]  -  Ошибка post/get запроса ->  Пропуск действия", true);    
}
 
Последнее редактирование:
C#:
Развернуть Свернуть Копировать
//постим запросом на imgur
int query_count = 0;
string answer = string.Empty;
while(answer==""){
 answer = ZennoPoster.HttpPost(
 "https://api.imgur.com/3/image",post_data,
 "multipart/form-data",
 "",
 "utf-8",
 ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
 30000,"","ShareX",true,10,
 new [] {
 "Host: api.imgur.com",
 "Authorization: Client-ID d297fd441566f99",
 "Content-Type: multipart/form-data; boundary=--------------------8d58d7876f67e5b",
 "Connection: keep-alive"
 }
 );
 if (++query_count>=5 && answer=="")
 {
 project.Variables["answer"].Value = "";
 project.SendWarningToLog("[Финальная отправка данных: пустой ответ 5 раз(а) подряд]", true);
 }
}
//парсим нашу картинку //(?<="id":").*?(?=")
string pic="";
try{pic = Convert.ToString(Regex.Match(answer, @"(?<=""id"":"").*?(?="")")).Trim();}catch{}
 
  • Спасибо
Реакции: SHILY
C#:
Развернуть Свернуть Копировать
//постим запросом на imgur
int query_count = 0;
string answer = string.Empty;
while(answer==""){
answer = ZennoPoster.HttpPost(
"https://api.imgur.com/3/image",post_data,
"multipart/form-data",
"",
"utf-8",
ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
30000,"","ShareX",true,10,
new [] {
"Host: api.imgur.com",
"Authorization: Client-ID d297fd441566f99",
"Content-Type: multipart/form-data; boundary=--------------------8d58d7876f67e5b",
"Connection: keep-alive"
}
);
if (++query_count>=5 && answer=="")
{
project.Variables["answer"].Value = "";
project.SendWarningToLog("[Финальная отправка данных: пустой ответ 5 раз(а) подряд]", true);
}
}
//парсим нашу картинку //(?<="id":").*?(?=")
string pic="";
try{pic = Convert.ToString(Regex.Match(answer, @"(?<=""id"":"").*?(?="")")).Trim();}catch{}

Спасибо, теперь запрос хотя бы запускается, только куки надо сейчас как-то извлечь из контейнера куков, у "ZennoPoster.HttpPost" нет же функции CookieContainer*lol*
 
все есть
fUvb7On.png

вот пример из доков
C#:
Развернуть Свернуть Копировать
// clear profile cookie container
project.Profile.CookieContainer.Clear();
// creates new cookie container
var cookieContainer = new CookieContainer();
// http request
ZennoPoster.HTTP.Request(InterfacesLibrary.Enums.Http.HttpMethod.GET, "https://zennolab.com", cookieContainer: cookieContainer);


Спасибо, теперь запрос хотя бы запускается, только куки надо сейчас как-то извлечь из контейнера куков, у "ZennoPoster.HttpPost" нет же функции CookieContainer*lol*
 
  • Спасибо
Реакции: SHILY
все есть
fUvb7On.png

вот пример из доков
C#:
Развернуть Свернуть Копировать
// clear profile cookie container
project.Profile.CookieContainer.Clear();
// creates new cookie container
var cookieContainer = new CookieContainer();
// http request
ZennoPoster.HTTP.Request(InterfacesLibrary.Enums.Http.HttpMethod.GET, "https://zennolab.com", cookieContainer: cookieContainer);


Ты меня запутал *lol*

Я изначально же и использовал "InterfacesLibrary.Enums.Http.HttpMethod.POST"(там есть функция контейнера) и всё заполнено верно, обычные пост/гет/put и т.д. запросы работают, а загрузка файла BoundaryForm не хочет - вылетает исключение. А ты кинул сначала пример кода на "ZennoPoster.HttpPost" - он срабатывает с моими же данными, но там нет функции контейнера, от этого файл и не загружается:(
 
ну так передай куки из контейнера
 
ну так передай куки из контейнера

Это-то понятно, но не понятно то, почему "InterfacesLibrary.Enums.Http.HttpMethod.POST" - не работает, а "ZennoPoster.HttpPost" - работает. Может это баг о котором нужно сообщить?
 
Это-то понятно, но не понятно то, почему "InterfacesLibrary.Enums.Http.HttpMethod.POST" - не работает, а "ZennoPoster.HttpPost" - работает. Может это баг о котором нужно сообщить?
про этот баг уже давно говорят , но поддержка не спешит его чинить.
 

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