8.х HTTPСоединение отправка POST запросом

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем NewCoder, 7 апр 2018.

  1. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    251
    Симпатии:
    1
    Баллы:
    29
    Добрый день, мне необходимо отправить на сайт данные из 1C в JSON формате (по сути текстовый файл с определенной структурой). Но не могу понять, как избавиться от ошибки:
    "{Обработка.КрКл_1СВеб.Форма.Форма.Форма(406)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
    HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс,
    по причине:
    Ошибка работы с Интернет: Не могу установить соединение"

    Я реализовал такую обработку:
    Код:
     
    // Создаем объект HTTP-соединения с заданным сервером
    // Последний параметр указывает будет ли использоваться
    // защищенное соединение
    HTTP =  Новый HTTPСоединение("185.185.70.177",,,,,Истина);
    Ресурс = "/1c/sendFile";
    // Создаем временный файл, который будет
    // передан в теле POST-запроса
    ФайлЗапроса = ПолучитьИмяВременногоФайла();
    ТекстЧт = Новый ТекстовыйДокумент; 
    ТекстЧт.Прочитать("C:\Users\Aleksandr\Desktop\JSON.txt");    
    ТелоЗапроса = ТекстЧт;
    Объект.Реквизит1 =ТелоЗапроса;
    // Записываем в файл текстовое содержимое
    // тела запроса (переменная "ТелоЗапроса")
    ТекстовыйФайл = Новый ТекстовыйДокумент;
    ТекстовыйФайл.УстановитьТекст(ТелоЗапроса);         
    ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.ANSI);
    // Получаем размер отправляемых данных в теле запроса
    ФайлОтправки = Новый Файл(ФайлЗапроса);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    // Подготовим временный файл для получения тела
    // ответа POST-запроса
    ФайлРезультата = ПолучитьИмяВременногоФайла();
    // Для того, чтобы установить заголовки 
    // POST-запроса создадим соответствие
    ЗаголовокHTTP = Новый Соответствие();
    // В этом примере устанавливаем в заголовках запроса
    // размер передаваемых данных и их тип
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
    ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
    
    HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс,
                               ФайлРезультата, ЗаголовокHTTP);
    // Получаем ответ веб-сервера на POST-запрос
    // в виде текста
    ТекстовыйФайлОтвет = Новый ТекстовыйДокумент;
    ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8);
    СтрокаОтветСервера = ТекстовыйФайлОтвет.ПолучитьТекст();
  2. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    251
    Симпатии:
    1
    Баллы:
    29
    Убрал из строки значение Истина HTTP = Новый HTTPСоединение("185.185.70.177",,,,,Истина); т.е. получилось так
    HTTP = Новый HTTPСоединение("185.185.70.177",,,,,); Истина - это защищенное соединение, далее отключил антивирус, после этого ошибки ни какие не выдаются, но проблема в том, что
    СтрокаОтветСервера приходит с такими символами:"�����������������", что может быть? Веб ресурс проверял с помощью сервиса https://www.hurl.it/ - все работает.
    Последнее редактирование: 7 апр 2018
  3. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    7.886
    Симпатии:
    504
    Баллы:
    204
  4. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    251
    Симпатии:
    1
    Баллы:
    29
    не то, я это уже сделал, мне нужно это отправить на веб. И сейчас при отправке, я получаю ответ от сервера такого вида: �����������������
  5. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.336
    Симпатии:
    972
    Баллы:
    204
    Вы на 100% уверены, что ответ приходит в кодировке UTF-8, а не Win1251?
  6. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    251
    Симпатии:
    1
    Баллы:
    29
    не знаю точно
  7. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.336
    Симпатии:
    972
    Баллы:
    204
    В таком случае, для чего вы делаете
    ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8);

    ?
  8. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    251
    Симпатии:
    1
    Баллы:
    29
    чтобы понять что все ушло без ошибок
  9. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.336
    Симпатии:
    972
    Баллы:
    204
    Сделайте

    Код:
    ТекПоток = Новый ЧтениеТекста(ИмяФайлаОтвета);
    ОтветСервера = ТекПоток.Прочитать();
    ТекПоток.Закрыть();
    и посмотрите на результат
    NewCoder нравится это.
  10. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    251
    Симпатии:
    1
    Баллы:
    29
    проверил, utf-8, но обнаружил, что если структуру JSON с информацией загружать не из текстового файла, а из строки так:
    Код:
    ДанныеОКлиенте = Новый Структура("kodapi", Объект.api_key);    ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, ДанныеОКлиенте); СтрокаДляТела = ЗаписьJSON.Закрыть();
    то отправляется и приходит правильный ответ. Тогда у меня вопрос почему если из текстового файла - не отправляется нормально. У меня просто довольно большая структура в него сохраняется для отправки. Структуру я проверял (копировал содержимое файла) на спец сервисе, если с него отправлять то ответ приходит правильный.
  11. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.336
    Симпатии:
    972
    Баллы:
    204
    Потому что на первый взгляд

    Код:
    ......
    ТекстЧт = Новый ТекстовыйДокумент;
    ТекстЧт.Прочитать("C:\Users\Aleksandr\Desktop\JSON.txt");   
    ТелоЗапроса = ТекстЧт;
    Объект.Реквизит1 =ТелоЗапроса;
    ....
    есть чушь, т.к. ТекстЧт - это сам объект ТектовыйДокумент, а не его содержимое.
    NewCoder нравится это.
  12. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    251
    Симпатии:
    1
    Баллы:
    29
    это я поправил еще вчера.
  13. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.336
    Симпатии:
    972
    Баллы:
    204
    Значит есть еще какие-то проблемы, известные только вам.
  14. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    251
    Симпатии:
    1
    Баллы:
    29
    Последнее редактирование: 8 апр 2018
  15. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    251
    Симпатии:
    1
    Баллы:
    29
    Да, вы оказались правы, я не сохранил изменения вчера и из-за этого не работало! Спасибо!

Поделиться этой страницей