|
v7: Посылка запроса к вэб серверу с JSON | ☑ | ||
---|---|---|---|---|
0
maestro-72
17.05.16
✎
10:50
|
Требуется отсылать данные к веб серверу в формате JSON. Никогда с этим ранее не сталкивался. Делал обращение к вебу через Microsoft.XMLHTTP отсылал xml данные, json отсылать не приходилось. Если не трудно, натолкните на мысль или где толково почитать ссылку, сам не нашел. Может примерчик толковый, буду рад. Спасибо.
|
|||
1
drcrasher
17.05.16
✎
10:51
|
методическую поддержку посмотреть - не?
|
|||
2
maestro-72
17.05.16
✎
10:55
|
(1) Методическую? Там написано как правильно отослать данные json на веб. Давайте ссылку с удовольствием почитаю. Речь идет о 1с77. В 1с8 проще...
|
|||
3
drcrasher
17.05.16
✎
10:57
|
(2) 77? предупреждать надо было.
а так - джейсон - это банальный текстовик собранный по определённым правилам. если просто текст запросом послать можешь, то проблем не должно быть |
|||
4
ADirks
17.05.16
✎
10:58
|
||||
5
maestro-72
18.05.16
✎
17:20
|
По инструкции мне предлагается посылать запрос с помощью CURL
Чтото типа curl H "ContentType: application/json" X POST d '{"api_key": "TEST_API_KEY_FOR_UR007",.... "total": 4008.47 } ] }' http://Какойтосайт.ru/vs/api/orders.json хочу с помощью Microsoft.XMLHTTP Post запросом отправить. Как это сделать? |
|||
6
maestro-72
18.05.16
✎
17:22
|
или как посмотреть, что делает CURL и на этой основе свой запрос написать. Не хочу использвоать стороннюю программу, когда можно все сделать встроенными средствами.
|
|||
7
BalBess
19.05.16
✎
07:46
|
httpRequest = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
httpRequest.Open("POST",АдресСкрипта,0); // Синхронный режим. // устанавливаем заголовки httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); // посылаем данные httpRequest.send(data);// Интересно, если размер строки больше 385 Кб 1С вылетает... if (httpRequest.Status = 200) then ResText = СокрЛП(httpRequest.ResponseText); else СтрокаСостояния("Статус ответа: "+httpRequest.Status +" - "+ httpRequest.statusText, "!!!"); endif; В data пихай свой json только это "эскиз", надо все оборачивать в попытка/исключение |
|||
8
ADirks
19.05.16
✎
08:20
|
посмотреть кто что посылает можно например такой штукой: http://www.ieinspector.com/
ещё пример, с долбанным utf-8 только куда тут пихать JSON - в URL или в Data - я не знаю Функция ЗапросКСайту(Метод, Аргументы) Команда = "method="+Метод; Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl"); Скрипт.Language = "JScript"; Стр = " |function utf8_decode (aa) { | var bb = '', c = 0; | for (var i = 0; i < aa.length; i++) { | c = aa.charCodeAt(i); | if (c > 127) { | if (c > 1024) { | if (c == 1025) { | c = 1016; | } else if (c == 1105) { | c = 1032; | } | bb += String.fromCharCode(c - 848); | } | } else { | bb += aa.charAt(i); | } | } | return bb; |} | |function DoCommand(Command) |{ | var URL = '"+API_Entry+"?' + Command; | | var WinHttp = new ActiveXObject('WinHttp.WinHttpRequest.5.1'); | WinHttp.Option(2, 'utf-8'); | WinHttp.Open('POST', URL, 0); //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'); | | WinHttp.Send(); | | return WinHttp.responseText; | return utf8_decode(WinHttp.responseText); |} |"; Скрипт.AddCode(стр); Попытка Ответ = Скрипт.Run("DoCommand", Команда); Исключение Ответ = 0; КонецПопытки; Возврат Ответ; КонецФункции |
|||
9
Pistol
19.05.16
✎
08:26
|
(7) А зачем ты ставишь такой тип содержимого?
|
|||
10
ALFkz
19.05.16
✎
08:45
|
Я так делаю
ПараметрыЗапроса=Новый Структура; ПараметрыЗапроса.Вставить("client_message_id",Строка(НомерСообщения)); ПараметрыЗапроса.Вставить("sender","TsGarant"); ПараметрыЗапроса.Вставить("recipient",НомерТелефона); ПараметрыЗапроса.Вставить("message_text",СОКРЛП(Текст)); СтрокаJSON = СформироватьСтрокуJSONИзСтруктуры(ПараметрыЗапроса); WinHttp=Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Open("POST","https://api.??.??/app/smsgw/rest/v2/messages",0); WinHttp.SetRequestHeader("Content-Type","application/json;charset=utf-8"); WinHttp.SetRequestHeader("Authorization","Basic dHNnX34234234234234234234234"); WinHttp.Send(СтрокаJSON); ТекстОтвет = WinHttp.ResponseText(); Функция URLEncode(стр) Экспорт Длина=СтрДлина(Стр); Итог=""; Для Н=1 По Длина Цикл Знак=Сред(Стр,Н,1); Код=КодСимвола(Знак); если ((Знак>="a")и(Знак<="z")) или ((Знак>="A")и(Знак<="Z")) или ((Знак>="0")и(Знак<="9")) тогда Итог=Итог+Знак; Иначе Если (Код>=КодСимвола("А"))И(Код<=КодСимвола("п")) Тогда Итог=Итог+"%"+ПреобразоватьвСистему(208,16)+"%"+ПреобразоватьвСистему(144+Код-КодСимвола("А"),16); ИначеЕсли (Код>=КодСимвола("р"))И(Код<=КодСимвола("я")) Тогда Итог=Итог+"%"+ПреобразоватьвСистему(209,16)+"%"+ПреобразоватьвСистему(128+Код-КодСимвола("р"),16); ИначеЕсли (Знак="ё") Тогда Итог=Итог+"%"+ПреобразоватьвСистему(209,16)+"%"+ПреобразоватьвСистему(145,16); ИначеЕсли (Знак="Ё") Тогда Итог=Итог+"%"+ПреобразоватьвСистему(208,16)+"%"+ПреобразоватьвСистему(129,16); Иначе Итог=Итог+"%"+ПреобразоватьвСистему(Код,16); КонецЕсли; КонецЕсли; КонецЦикла; Возврат Итог; КонецФункции Функция СформироватьСтрокуJSONИзМассива(Объект) СтрокаJSON = "["; Для каждого Элемент Из Объект Цикл Если ТипЗнч(Элемент) = Тип("Строка") Тогда СтрокаJSON = СтрокаJSON + """" + Элемент + """"; ИначеЕсли ТипЗнч(Элемент) = Тип("Число") Тогда СтрокаJSON = СтрокаJSON + СтрЗаменить(Строка(Элемент), Символы.НПП, ""); ИначеЕсли ТипЗнч(Элемент) = Тип("Булево") Тогда СтрокаJSON = СтрокаJSON + Формат(Элемент, "БЛ=false; БИ=true"); ИначеЕсли ТипЗнч(Элемент) = Тип("Дата") Тогда СтрокаJSON = СтрокаJSON + Формат(Элемент - Дата(1970,1,1,1,0,0), "ЧГ=0"); ИначеЕсли ТипЗнч(Элемент) = Тип("Массив") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент); ИначеЕсли ТипЗнч(Элемент) = Тип("Структура") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент); ИначеЕсли ТипЗнч(Элемент) = Тип("ТаблицаЗначений") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент); Иначе СтрокаJSON = СтрокаJSON + """" + URLEncode(Строка(Элемент)) + """"; КонецЕсли; СтрокаJSON = СтрокаJSON + ","; КонецЦикла; Если Прав(СтрокаJSON, 1) = "," Тогда СтрокаJSON = Лев(СтрокаJSON, СтрДлина(СтрокаJSON)-1); КонецЕсли; Возврат СтрокаJSON + "]"; КонецФункции Функция СформироватьСтрокуJSONИзСтруктуры(Объект) СтрокаJSON = "{"; Для каждого Элемент Из Объект Цикл Если Элемент.Значение = "" Тогда Продолжить; КонецЕсли; СтрокаJSON = СтрокаJSON + """" + Элемент.Ключ + """" + ":"; Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда СтрокаJSON = СтрокаJSON + """" + Элемент.Значение + """"; ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Число") Тогда СтрокаJSON = СтрокаJSON + СтрЗаменить(Строка(Элемент.Значение), Символы.НПП, ""); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Булево") Тогда СтрокаJSON = СтрокаJSON + Формат(Элемент.Значение, "БЛ=false; БИ=true"); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Дата") Тогда СтрокаJSON = СтрокаJSON + Формат(Элемент.Значение - Дата(1970,1,1,1,0,0), "ЧГ=0"); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Массив") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент.Значение); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Структура") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент.Значение); ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("ТаблицаЗначений") Тогда СтрокаJSON = СтрокаJSON + СформироватьСтрокуJSON(Элемент.Значение); Иначе СтрокаJSON = СтрокаJSON + """" + URLEncode(Строка(Элемент.Значение)) + """"; КонецЕсли; СтрокаJSON = СтрокаJSON + ","; КонецЦикла; Если Прав(СтрокаJSON, 1) = "," Тогда СтрокаJSON = Лев(СтрокаJSON, СтрДлина(СтрокаJSON)-1); КонецЕсли; Возврат СтрокаJSON + "}"; КонецФункции Функция СформироватьСтрокуJSON(Объект) Экспорт СтрокаJSON = ""; Если ТипЗнч(Объект) = Тип("Массив") Тогда СтрокаJSON = СформироватьСтрокуJSONИзМассива(Объект); ИначеЕсли ТипЗнч(Объект) = Тип("Структура") Тогда СтрокаJSON = СформироватьСтрокуJSONИзСтруктуры(Объект); ИначеЕсли ТипЗнч(Объект) = Тип("ТаблицаЗначений") Тогда СоставСтруктуры = ""; Для каждого Колонка Из Объект.Колонки Цикл СоставСтруктуры = СоставСтруктуры + ?(ЗначениеЗаполнено(СоставСтруктуры), ",", "") + Колонка.Имя; КонецЦикла; МассивСтрок = Новый Массив; Для каждого Строка Из Объект Цикл СтруктураКолонок = Новый Структура(СоставСтруктуры); ЗаполнитьЗначенияСвойств(СтруктураКолонок, Строка); МассивСтрок.Добавить(СтруктураКолонок); КонецЦикла; СтрокаJSON = СформироватьСтрокуJSONИзМассива(МассивСтрок); КонецЕсли; Возврат СтрокаJSON; КонецФункции Процедура ЗаполнитьДанныеИзОтветаJSON(Результат, ТекстJSON, ТипДанных) ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); НомерЗначения = 0; Пока ТекстJSON <> "" Цикл ПервыйСимвол = Лев(ТекстJSON, 1); Если ПервыйСимвол = "{" Тогда Значение = Новый Структура; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Структура"); Если ТипДанных = "Структура" Тогда Результат.Вставить("Значение" + ?(НомерЗначения = 0, "", НомерЗначения), Значение); НомерЗначения = НомерЗначения + 1; ИначеЕсли ТипДанных = "Массив" Тогда Результат.Добавить(Значение); КонецЕсли; ИначеЕсли ПервыйСимвол = "[" Тогда Значение = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Массив"); Если ТипДанных = "Структура" Тогда Результат.Вставить("Значение" + ?(НомерЗначения = 0, "", НомерЗначения), Значение); НомерЗначения = НомерЗначения + 1; Иначе Результат.Добавить(Значение); КонецЕсли; ИначеЕсли ПервыйСимвол = "}" И ТипДанных = "Структура" Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); Если Лев(ТекстJSON, 1) = "," Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); КонецЕсли; Возврат; ИначеЕсли ПервыйСимвол = "]" И ТипДанных = "Массив" Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); Если Лев(ТекстJSON, 1) = "," Тогда ТекстJSON = СокрЛП(Сред(ТекстJSON, 2)); КонецЕсли; Возврат; Иначе Если ТипДанных = "Структура" Тогда Поз = Найти(ТекстJSON, ":"); Если Поз = 0 Тогда Прервать; КонецЕсли; ИмяЗначения = СокрЛП(Лев(ТекстJSON, Поз-1)); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз+1)); Если Лев(ТекстJSON, 1) = "{" Тогда Значение = Новый Структура; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Структура"); ИначеЕсли Лев(ТекстJSON, 1) = "[" Тогда Значение = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(Значение, ТекстJSON, "Массив"); Иначе Поз = 0; Кавычка=ложь; Для Сч = 1 По СтрДлина(ТекстJSON) Цикл Символ = Сред(ТекстJSON, Сч, 1); Если (Символ = "," и Не Кавычка) ИЛИ Символ = "]" ИЛИ Символ = "}" Тогда Поз = Сч; Прервать; КонецЕсли; Если Символ=Символ(34) тогда Кавычка=Не Кавычка; конецесли; КонецЦикла; Если Поз = 0 Тогда Значение = ТекстJSON; ТекстJSON = ""; Иначе Значение = Лев(ТекстJSON, Поз-1); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз + ?(Сред(ТекстJSON, Поз, 1) = ",", 1, 0))); КонецЕсли; Значение = СокрЛП(Значение); КонецЕсли; Результат.Вставить(СтрЗаменить(ИмяЗначения,Символ(34),""), СтрЗаменить(Значение,Символ(34),"")); ИначеЕсли ТипДанных = "Массив" Тогда Поз = 0; Для Сч = 1 По СтрДлина(ТекстJSON) Цикл Символ = Сред(ТекстJSON, Сч, 1); Если Символ = "," ИЛИ Символ = "]" ИЛИ Символ = "}" Тогда Поз = Сч; Прервать; КонецЕсли; КонецЦикла; Если Поз = 0 Тогда Значение = ТекстJSON; ТекстJSON = ""; Иначе Значение = Лев(ТекстJSON, Поз-1); ТекстJSON = СокрЛП(Сред(ТекстJSON, Поз + ?(Сред(ТекстJSON, Поз, 1) = ",", 1, 0))); КонецЕсли; Значение = СокрЛП(Значение); Результат.Добавить(Значение); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры Функция ЗаполнитьСтруктуруИзОтветаJSON(Знач ТекстJSON) Экспорт Результат = Новый Структура; ТекстJSON = СтрЗаменить(ТекстJSON, "\""", """"); //ТекстJSON = СтрЗаменить(ТекстJSON, """", ""); Если Лев(ТекстJSON, 1) = "{" Тогда ЗаполнитьДанныеИзОтветаJSON(Результат, ТекстJSON, "Структура"); ИначеЕсли Лев(ТекстJSON, 1) = "[" Тогда МассивДанных = Новый Массив; ЗаполнитьДанныеИзОтветаJSON(МассивДанных, ТекстJSON, "Массив"); Результат.Вставить("Значение", МассивДанных); КонецЕсли; Возврат Результат; КонецФункции |
|||
11
maestro-72
19.05.16
✎
09:06
|
Огромное всем спасибо, буду разбираться. Есть над чем подумать...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |