Имя: Пароль:
1C
 
1с multipart form-data
0 SuperMario
 
08.12.19
20:25
Друзья, всем доброго времени суток.
Есть код на C Sharp , который отправляет POST запрос на WEB сервер.


public string ImportWriteoffAct(WAI_WriteOffAct Act)
{
    string str2;
    string input = "";
    try
    {
        string path = FlagmanHelper.AddFinalBackSlash(Application.StartupPath) + @"data\import\";
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        str2 = Path.Combine(path, "Act" + Act.Number.ToString() + ".txt");
        StreamWriter writer = new StreamWriter(str2, false, Encoding.Default);
        writer.WriteLine("Article;Name;Units;Amount;");
        int num = 0;
        while (true)
        {
            if (num >= Act.Products.Count)
            {
                writer.Close();
                break;
            }
            writer.WriteLine(Act.Products[num].ToCsvLine());
            num++;
        }
    }
    catch (Exception exception)
    {
        this.LogManager.AddToErrorLog("Ошибка импорта акта списания " + Act.Number.ToString() + ": " + exception.Message);
        return null;
    }
    FileStream stream = new FileStream(str2, FileMode.Open, FileAccess.Read);
    byte[] buffer = new byte[stream.Length];
    stream.Read(buffer, 0, buffer.Length);
    stream.Close();
    Dictionary<string, object> postParameters = new Dictionary<string, object> {
        {
            "documentType",
            "WriteOffDocument"
        },
        {
            "fileName",
            new WAI_FileParameter(buffer, Path.GetFileName(str2), "application/vnd.ms-excel")
        },
        {
            "dateIncoming",
            Act.Date.ToShortDateString()
        },
        {
            "documentNumber",
            Act.Number.ToString()
        },
        {
            "store",
            Act.StoreId
        },
        {
            "toAccount",
            Act.AccountId
        },
        {
            "action",
            "Import"
        }
    };
    HttpWebResponse response = MultipartFormDataPost("http://"; + this.Host + ":" + this.Port + "/" + this.Server + "/service/import/importDocuments.jsp", "Ghost", postParameters, this.Login, this.Password);
    string str6 = new StreamReader(response.GetResponseStream()).ReadToEnd();
    response.Close();
    input = str6.Replace("\n", "");
    if (input != "")
    {
        if (input.IndexOf("<span") >= 0)
        {
            input = input.Substring(input.IndexOf("<span"));
        }
        else if (input.IndexOf("<pre") >= 0)
        {
            input = input.Substring(input.IndexOf("<pre"));
        }
        input = Regex.Replace(input, "<.*?>", " ");
    }
    return input;



Пытаюсь этот код реализовать на 1С.

Собрал текст в формате multipart form-data


В заголовок добавляю

    Заголовки= Новый Соответствие();
    boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + boundary);

Не пойму, как  передать тело запроса.
В заголовках?
1 Cthulhu
 
08.12.19
20:47
УстановитьТелоИзСтроки
2 Cthulhu
 
08.12.19
20:49
HTTPЗапрос = Новый HTTPЗапрос( <path> , Заголовки );
HTTPЗапрос.УстановитьТелоИзСтроки( СтрJSON , КодировкаТекста.UTF8 );
// ну. например ))
3 SuperMario
 
08.12.19
21:52
(1)Делал.

file is not specified
Я поэтому и выложил код на C Charp
4 Cthulhu
 
08.12.19
21:55
(3): нунэнаюу.. у менф жсон нормально укладывается и работает.
5 Юрий Лазаренко
 
08.12.19
22:03
6 SuperMario
 
08.12.19
22:13
(5) читал.
Там только описания создания составного (multipart) HTTP-сообщения

Вопрос , как передать это все чудо?
7 SuperMario
 
08.12.19
23:05
Поставил Fiddler WEB Debugger  и посмотрел тело запроса.
Оно отличается от того, что шлет C Charp.
Завтра сравню и попробую подстроиться.
8 SuperMario
 
09.12.19
17:05
Нашел ошибку в коде.
Все банально- не так кодировка текста.
Я использовал UTF-8, а методом научного тыка оказалась ANSI
тема закрыта)
Программист всегда исправляет последнюю ошибку.