|
v7: Рабочий пример отправки файла json на сайт | ☑ | ||
---|---|---|---|---|
0
Мимохожий Однако
25.05.21
✎
12:48
|
Ищу рабочий пример отправки файла формата json.
|
|||
1
Мимохожий Однако
25.05.21
✎
12:49
|
1С:Предприятие 7.7
|
|||
2
Мимохожий Однако
25.05.21
✎
12:50
|
Чем можно проверить, что в результате отсылается на сайт?
|
|||
3
Кирпич
25.05.21
✎
12:54
|
(2) Послать на свой сайт и там принять. Такой вариант подойдет?
|
|||
4
big
25.05.21
✎
13:28
|
Что-то вроде этого:
curl.exe +" -X POST https://ismp.crpt.ru/api/v3/auth/cert/ -H ""content-type: application/json;charset=UTF-8"" --data-binary @"+ИмяФайлаИсходящий+" --output " + ФайлОтвета; ИмяФайлаИсходящий - твой json с данными. Это реальная командная строка для получения токена с Честного знака. з.ы. если конечно там ничего не поменяли )) |
|||
5
fisher
25.05.21
✎
13:33
|
(2) fiddler
(4) Курлом нещитово :) |
|||
6
big
25.05.21
✎
13:38
|
(5) Чойта?? Очень рабочий вариант. Очень!
Начал переделывать на WinHTTP, но что-то боюсь будущих известных глюков )) |
|||
7
fisher
25.05.21
✎
13:54
|
(6) Шутка юмора. Курл - универсальная отмычка.
А в 7.7 хоть так хоть эдак без внешних зависимостей не обойтись, так что вполне норм. Только и того, что библиотекой красивше чуток, что ли... |
|||
8
2mugik
25.05.21
✎
14:33
|
(0)winHTTP а семерке нормально работало.
|
|||
9
big
25.05.21
✎
19:14
|
(8) При объеме получаемых данных более 150 кБ (или сколько там - точно не помню) 7-ка вешается наглухо. Я на ЕГАИС с этой багофичей столкнулся, пришлось очень быстро переделывать на курлу.
|
|||
10
Мимохожий Однако
25.05.21
✎
19:59
|
(8) Можно примерчик? )
|
|||
11
tgu82
25.05.21
✎
20:12
|
(10) Я и через curl отправлял несколько лет а сейчас через ncftp
|
|||
12
FN
26.05.21
✎
10:45
|
Примерно так:
winhttp = СоздатьОбъект("winhttp.winhttprequest.5.1"); winhttp.Open(Метод,УРЛ); ... СтримЧтение = СоздатьОбъект("ADODB.Stream"); СтримЧтение.Type = 1; СтримЧтение.Mode = 3; СтримЧтение.Charset = "UTF-8"; СтримЧтение.Open(); Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl"); Скрипт.Language = "VBScript"; Скрипт.Timeout=-1; Скрипт.AddObject("StreamRead",СтримЧтение); Скрипт.AddObject("winhttp",winhttp); СтримЧтение.LoadFromFile(ИмяФайлаСЗапросом); Если СтримЧтение.Type=1 Тогда Скрипт.Eval("winhttp.send(StreamRead.Read())"); Иначе Скрипт.Eval("winhttp.send(StreamRead.ReadText())"); КонецЕсли; |
|||
13
SiAl-chel
26.05.21
✎
11:26
|
(12) Непонятно зачем создавать внутри 1С winhttprequest, чтобы потом его передавать в скрипт, выполняемый через MSScriptControl? Не проще ли в скрипте создать объект winhttprequest или уже в коде самой 1С оперировать объектом winhttprequest без всяких там MSScriptControl?
|
|||
14
big
26.05.21
✎
11:55
|
WinHttp=СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"UTF-8"); WinHttp.SetTimeouts(10000,10000,10000,10000); Если флПрокси<>0 Тогда ПрксСервер = СокрЛП(ПроксиСервер); ПрксЮзер = СокрЛП(ПроксиПользователь); ПрксПароль = СокрЛП(ПроксиПароль); WinHttp.SetProxy(2,ПрксСервер); КонецЕсли; ТипЗапроса = "GET"; АдресСервиса = "https://ismp.crpt.ru/api/v3/auth/cert/key"; СпсЗаголовки = СоздатьОбъект("СписокЗначений"); СпсЗаголовки.ДобавитьЗначение("application/json;charset=UTF-8","content-type"); Попытка WinHttp.Open(ТипЗапроса, АдресСервиса, 0); // 0 - для сервера, 1 - для прокси Если флПрокси<>0 Тогда WinHttp.SetCredentials(ПрксЮзер,ПрксПароль,1); КонецЕсли; Исключение Сообщить("СоздатьОбъектWinHttp Ошибка при попытке установить соединение с "+АдресСервиса+": "+ОписаниеОшибки()); Возврат 0; КонецПопытки; Если ТипЗначенияСтр(СпсЗаголовки) = "СписокЗначений" Тогда Для а = 1 По СпсЗаголовки.РазмерСписка() Цикл ИмяЗаголовка = ""; ЗначениеЗаголовка = СпсЗаголовки.ПолучитьЗначение(а,ИмяЗаголовка); Если (ПустоеЗначение(ИмяЗаголовка) = 0) И (ПустоеЗначение(ЗначениеЗаголовка) = 0) Тогда WinHttp.SetRequestHeader(ИмяЗаголовка, ЗначениеЗаголовка); КонецЕсли; КонецЦикла; КонецЕсли; ТекстДляОтправки = "0123456789ADCDEF"; WinHttp.Send(ТекстДляОтправки); ОтветСервиса = WinHttp.ResponseText(); Если WinHttp.Status <> 200 Тогда // 200 - статус ОК Сообщить("Ошибка: "+WinHttp.Status + " - " + WinHttp.StatusText); Иначе Сообщить("ОК"); КонецЕсли; Красоту наводить не стал, всё и так понятно |
|||
15
FN
26.05.21
✎
13:10
|
(13) Скрипт нужен что бы обойти проблему из (9)
Объекты проще создавать и управлять ими именно из кода 1С, чем делать все в скрипте. Скрипт нужен только что бы большой объем данных был обработан за пределами процесса 1Cv7. |
|||
16
Мимохожий Однако
26.05.21
✎
13:52
|
(14) А можно пример POST-запроса?
или достаточно использовать строку ТипЗапроса = "POST"; вместо ТипЗапроса = "GET"; ? |
|||
17
FN
26.05.21
✎
15:55
|
(16) просто строка.
Пример запроса: СоединениеWinHttp=СоздатьОбъект("WinHttp.WinHttpRequest.5.1"); СоединениеWinHttp.SetTimeouts(1000,2000,2000,2000); СоединениеWinHttp.Open("POST", "http://********.com/********.php", 0); СоединениеWinHttp.SetRequestHeader("Content-Type","multipart/form-data;charset=Windows-1251;boundary=" + Boundary); СоединениеWinHttp.SetRequestHeader("Content-Length", СтрДлина(ТекстЗапроса)); Попытка СоединениеWinHttp.Send(ТекстЗапроса); Исключение КонецПопытки; Если СоединениеWinHttp.ResponseText="passed" Тогда |
|||
18
Мимохожий Однако
27.05.21
✎
09:31
|
При открытии объекта СтримЧтение (ADODB.Stream)
выдал ошибку: Операция не допускается в данном контексте Надо что-то зарегистрировать или права добавить? или что-то еще? |
|||
19
Мимохожий Однако
27.05.21
✎
10:01
|
Ошибку победил. Причина в неправильном пути к файлу с текстом запроса.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |