В сети, и в том числе на этом сайте, много тем по этому поводу. Содержимое большинства из них громоздки и запутанны. В числе прочего упоминается кодировка отправляемых данных в Base64, использование разделителей для отправки различных данных в одном запросе и т.д. В прилагаемой обработке все упрощено до минимума и «дебри» не рассматриваются. Предназначена для использования в качестве универсальной болванки для реализации более сложного функционала. В качестве примера используется сервис общеизвестной транспортной компании. В пост-запросе оправляется номер накладной, в ответ возвращается xml с информацией о её состоянии. На скрин-шоте реальная накладная (спасибо гуглу) на которой тестировал работоспособность.
Качать все не обязательно, выкладываю весь код модуля формы:
Процедура КнопкаВыполнитьНажатие(Кнопка)
Попытка
WinHttp = Новый COMОбъект(«WinHttp.WinHttpRequest.5.1»);
WinHttp.Option(2,«utf-8»);
WinHttp.Open(«POST»,«http://public.services.dellin.ru/tracker/XML/»,0);
WinHttp.SetRequestHeader(«Accept-Language», «ru»);
WinHttp.SetRequestHeader(«Accept-Charset»,«utf-8»);
WinHttp.setRequestHeader(«Content-Language», «ru»);
WinHttp.setRequestHeader(«Content-Charset», «utf-8»);
WinHttp.setRequestHeader(«Content-type», «application/x-www-form-urlencoded; charset=utf-8»);
ПараметрыПОСТ = «rwID=» + СокрЛП(НомерНакладной);
WinHttp.Send(ПараметрыПОСТ);
ТекстОтвета = WinHttp.ResponseText();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Где «НомерНакладной» — это строковое поле ввода на форме, куда вводите номер накладной (например, Сю-00090170085), а «ТекстОтвета» — это многострочное строковое поле, куда выводим результат.
После комментария Den_D решил добавить тоже самое, только встроенными средствами. Обратите внимание на амперсанд перед параметром — сэкономите время и нервы. Это обычная «особенность» 1С, которая решила что неважно сколько у вас там параметров — ставьте амперсанд ВСЕГДА ибо мы так хотим.
Обработку обновил.
Ну и код для нежелающих качать выкладываю. Надеюсь при этом на вашу социальную «плюсоответственность».
Процедура ОсновныеДействияФормыВыполнить2(Кнопка)
Сервер = «public.services.dellin.ru»;
Ресурс = «/tracker/XML/»;
HTTP = Новый HTTPСоединение(Сервер);
ФайлЗапроса = ПолучитьИмяВременногоФайла();
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.УстановитьТекст(«&rwID=» + СокрЛП(НомерНакладной));
ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.UTF8);
ФайлРезультата = ПолучитьИмяВременногоФайла();
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить(«Content-Type», «application/x-www-form-urlencoded»);
ЗаголовокHTTP.Вставить(«Accept-Language», «ru»);
ЗаголовокHTTP.Вставить(«Accept-Charset», «utf-8»);
ЗаголовокHTTP.Вставить(«Content-Language», «ru»);
ЗаголовокHTTP.Вставить(«Content-Charset», «utf-8»);
HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс, ФайлРезультата, ЗаголовокHTTP);
Ответ = Новый ТекстовыйДокумент();
Ответ.Прочитать(ФайлРезультата, КодировкаТекста.UTF8);
ТекстОтвета = Ответ.ПолучитьТекст();
УдалитьФайлы(ФайлЗапроса);
УдалитьФайлы(ФайлРезультата);
КонецПроцедуры
Исключения было лень писать… Но работоспособность проверял.
Пытался реализовать отправку GET и POST запросов штатными средствами 1С ничего не получилось. На просторах интернета нашел такую же схему. В любом случае спасибо, теперь в поиске на инфостарте людям можно будет легко найти эти несколько полезных строк.
(1) Den_D,Реализация штатными средствами 1С
(2) dour-dead, да я смотрел и эту обработку, но вариант этого автора мне нравится больше
Рекомендую использовать таймауты в запросах к серверу.
Иначе 1С «Замрет» на долго.
Подскажите, как реализовать такой POST запрос в 1С?
POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded
code=4/v6xr77ewYqhvHSyW6UJ1w7jKwAzu&
client_id=8819981768.apps.googleusercontent.com&
client_secret={client_secret}&
redirect_uri=https://oauth2-login-demo.appspot.com/code&
grant_type=authorization_code
делаю как описано в статье, выдает ошибку 302.
Автор молодец! С год назад пытался такое реализовать в 1С8 и не смог, несмотря на то, что ранее уже сделал это в 1С77. А здесь — просто, и с указанием подводных камней, привычных уже в 1С с ее зачаточной «документацией» по НТТР…
Мир этому дому!
Плюс за статью и открытость публикации кода.
Все это хорошо, пока под виндой.
Походу пора нормально прикручивать питон к 8-ке под всеми ОС, тогда и головная боль с такими задачами отпадет.
Поумничаю немного:
Соединение = Новый HTTPСоединение(«public.services.dellin.ru»;);
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить(«Content-Type», «application/x-www-form-urlencoded»);
Запрос = Новый HTTPЗапрос(«/tracker/XML/»,ЗаголовокHTTP);
Запрос.УстановитьТелоИзСтроки(«&rwID=» + СокрЛП(НомерНакладной));
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку(«UTF-8»);
Быстрее, проще веселее!
Делаю все как пишет «opx»:
Соединение = Новый HTTPСоединение(«sambonn.ru»);
Запрос = Новый HTTPЗапрос(«/admin/import/»);
Запрос.УстановитьТелоИзСтроки(«?action=ping»);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку(«UTF-8»);
Сообщить(«Ответ сата: » + ОтветВВидеСтроки);
Ничего не выводится, а должен быть ответ «0» или «1». В чем подвох?
При работе с HTTPS методы с HTTPСоединение выдают ошибку про сертификаты.
Куча методик с разных сайтов (про cacert.pem) увы не помогла.
А вот с WinHttp.WinHttpRequest всё просто полетело.
Спасибо за строки.
Спасибо автору, хотел добыть QR с «chart.googleapis.com/chart»,
метод с GET и ПолучитьCOMОбъект(«»,»Microsoft.XMLHTTP»);
не проходил с передачей большого объема кодирования,
с запросом POST не получилось не понимал запрос ни в какую, сам тупил,
наткунлся на Вашу статью оказалось не правильно передавал параметры.
Ваш метод попробовал ч.з. COMОбъект(«WinHttp.WinHttpRequest.5.1»), все окей.
Хотя сейчас использую OcvitaBarcode.
(9) opx, Веселее, но для 8.2.14 не подходит, там еще нет HTTP-команд (
Вариант 1 на 8.2.14 работает, спасибо автору…
(11) 7OH,
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
HTTPСоединение = Новый HTTPСоединение(«dip.7cont.ru»,,,,,,ЗащищенноеСоединение);
Подскажите, где ошибка?
Когда отправляю так, то все работает…
но если отправляю через http соединение
Показать
То выдает ошибку
по причине:
Ошибка при выполнении файловой операции ‘/rpc’
по причине:
Ошибка работы с Интернет: Ошибка доступа к ресурсу. Путь не найден: (400). SyntaxError: Unexpected token ?
at Object.parse (native)
at /var/www/v2/corev2/node_modules/express/node_modules/connect
at IncomingMessage.onEnd (/var/www/v2/corev2/node_modules/express/node_modules/connect
at IncomingMessage.g (events.js:199:16)
at IncomingMessage.emit (events.js:104:17)
at _stream_readable.js:908:16
at process._tickDomainCallback (node.js:381:11)
по причине:
Ошибка работы с Интернет: Ошибка доступа к ресурсу. Путь не найден: (400)
Показать
Поделюсь из своего личного опыта.
Вдруг кому пригодится.
Получал от сервера ошибку 400, типа, «Internal server error».
Причем, именно при запросе из 1С. Другими средствами запрос обрабатывался.
В результате оказалось вот в чем дело:
//Вызывало ошибку:
//Запрос.УстановитьТелоИзСтроки(ТекстPOSTЗапроса, КодировкаТекста.UTF8);
//Взлетело:
Запрос.УстановитьТелоИзСтроки(ТекстPOSTЗапроса, «CESU-8»);
//»CESU-8″ — Кодировка CESU-8 это и есть UTF-8 без BOM,
//приходится прописывать кодировку текстом, т.к. в текущей версии платформы
//или из за режима совместимости третий параметр метода УстановитьТелоИзСтроки(ТекстPOSTЗапроса,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать) не доступен,
//а в КодировкаТекста отсутствует вид кодировки «CESU-8»
Добрый день,
Столкнулся с проблемой.
$data = array( ‘secret’ => ‘972725f8566849d3a1b26g0d0a15fdc1’, ‘id’ => ‘CE100006045LV’, ); Это на PHP.
В 1с это выглядит Запрос.УстановитьТелоИзСтроки(«secret=пароль&id=номеркоробки»);
Но как мне передать:
$data = [ ‘secret’ => ‘972725f8566849d3a1b26g0d0a15fdc1’, ‘parcels’ => [ ‘internalID1’ => [ ‘type’ => ‘Ie’, ‘name_surname’ => ‘имя’, ‘city’ => ‘Jelgava’, ‘zipcode’ => ‘LV-1234’, ‘phone’ => ‘21234567’, ‘country_id’ => 4, ‘multiparcel’=>1, ‘group_uid’=>572725f8-5668-49d3-a1b2-620d0a15fdc6 ],
Не понимаю как корректно это все написать. Пробовал ЧтениеJSON, файлами… не получается.
Заранее спасибо!
secret=972725f8566849d3a1b26g0d0a15fdc1&parcels[internalID1][type]=Ie&parcels[internalID1][name_surname]=имя&….
..&group_uid=572725f8-5668-49d3-a1b2-620d0a15fdc6
(20) Большое спасибо!
18 -> то что нужно. Спасибо большое
(18)
Большое спасибо, пригодилось!
(18)
(18) Спасибо, заработало!