|
Помогите с запросом JSON | ☑ | ||
---|---|---|---|---|
0
KIraA
17.05.19
✎
09:52
|
Вот собственно сам запрос.
Строка = Объект.Логин + Объект.Пароль; ЛогинИПарольЗашифрованныйBase64 = СоздатьСтрокуBase64(Строка); Заголовоки = Новый Соответствие; Заголовоки.Вставить("POST", "https://***/app/smsgw/rest/v2/messages"); Заголовоки.Вставить("Host", "https://***"); Заголовоки.Вставить("Accept", "application/json, text/plain, */*"); Заголовоки.Вставить("Authorization", "Basic " + ЛогинИПарольЗашифрованныйBase64); Заголовоки.Вставить("Content-Type", "application/json;charset=utf-8"); ТелоЗапроса = ""; ТелоЗапроса = УстановитьТело(); ИмяФайлаОтвета = "E:\Проверка.txt"; Попытка Соединение = Новый HTTPСоединение("***", ,, , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"), 60, Новый ЗащищенноеСоединениеOpenSSL); ЗапросHTTP = Новый HTTPЗапрос; ЗапросHTTP.АдресРесурса = "/app/smsgw/rest/v2/messages"; ЗапросHTTP.Заголовки = Заголовоки; ЗапросHTTP.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); Соединение.ОтправитьДляОбработки(ЗапросHTTP, ИмяФайлаОтвета); Результат = ИмяФайлаОтвета; Исключение КонецПопытки; А вот ошибка <html> <head><title>400 Bad Request</title></head> <body bgcolor="white"> <center><h1>400 Bad Request</h1></center> <hr><center>nginx</center> </body> </html> This page contains the following errors: error on line 6 at column 8: Opening and ending tag mismatch: hr line 0 and body Below is a rendering of the page up to the first error. Вопрос как найти ошибку в запросе? Вернее как прочитать ЗапросHTTP и там уже найти error on line 6 at column 8? |
|||
1
Beduin
17.05.19
✎
09:53
|
штука нужна, с помощью которой будешь видеть обращения эти на сервисах
|
|||
2
KIraA
17.05.19
✎
09:54
|
а поподробнее?)
|
|||
3
Жан Пердежон
17.05.19
✎
09:55
|
УстановитьТело()
|
|||
4
KIraA
17.05.19
✎
10:05
|
еще варианты?
|
|||
5
Жан Пердежон
17.05.19
✎
10:07
|
(4) серьезно? предлагаешь гадать, что у тебя спрятано в этой функции?
|
|||
6
KIraA
17.05.19
✎
10:10
|
Да не надо гадать. Помогите правильно написать, чтоб прочитать ЗапросHTTP в виде строки.
|
|||
7
kennetmccormick
17.05.19
✎
10:31
|
видимо не нравится что есть в УстановитьТело()
попробуйте SoapUI или Postman-ом отправить |
|||
8
KIraA
20.05.19
✎
10:06
|
Есть еще идеи? Так и не получилось...
Вот функция УстановитьТело() Функция УстановитьТело() СтруктураПараметров = Новый Структура; //СтруктураПараметров.Вставить("client_message_id"); ///код //СтруктураПараметров.Вставить("recipient"); ///номер телефона //СтруктураПараметров.Вставить("message_text"); ///текс //СтруктураПараметров.Вставить("sender"); ///имя отправителя ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ПроверятьСтруктуру = Ложь; ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON; ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); Для каждого стр из Объект.Данные Цикл ЗаписьJSON.ЗаписатьНачалоОбъекта(); УИДСообщения = СтрЗаменить(Прав(Строка(Новый УникальныйИдентификатор), 10), "-", ""); ЗаписьJSON.ЗаписатьИмяСвойства("client_message_id"); ЗаписьJSON.ЗаписатьЗначение(УИДСообщения); ЗаписьJSON.ЗаписатьИмяСвойства("sender"); ЗаписьJSON.ЗаписатьЗначение(Объект.ИмяОтправителя); ЗаписьJSON.ЗаписатьИмяСвойства("recipient"); ЗаписьJSON.ЗаписатьЗначение(Объект.НомерТелефона); ЗаписьJSON.ЗаписатьИмяСвойства("message_text"); ЗаписьJSON.ЗаписатьЗначение(Объект.ТекстСообщения); ЗаписьJSON.ЗаписатьИмяСвойства("time_bounds"); ЗаписьJSON.ЗаписатьЗначение("ad99"); ЗаписьJSON.ЗаписатьКонецОбъекта(); КонецЦикла; ТелоЗапроса = ЗаписьJSON.Закрыть(); Возврат ТелоЗапроса КонецФункции |
|||
9
Мимохожий Однако
20.05.19
✎
10:15
|
Мне не понятна эта строка.
Строка = Объект.Логин + Объект.Пароль; |
|||
10
Garykom
гуру
20.05.19
✎
10:20
|
(8) Есть даже две!
1. Нанять программиста 2. Выдать ему мануал от АПИ |
|||
11
Garykom
гуру
20.05.19
✎
10:24
|
В Казахстане госконторы совсем оригинальные конечно
|
|||
12
bootini
20.05.19
✎
10:35
|
(0)
ЧтениеJSON = Новый ЧтениеJSON(); ЧтениеJSON.ОткрытьПоток(HTTPОтвет.ПолучитьТелоКакПоток()); Попытка СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Ложь); Исключение ОписаниеОшибки = ОписаниеОшибки + ОписаниеОшибки(); Возврат СтруктураОтвета; КонецПопытки; |
|||
13
KIraA
20.05.19
✎
10:52
|
(9)
Для дальнейшего перевода в строку Base64. Возвращается данные по пользователю и паролю в зашифрованном виде Строка = Логин + Пароль; ЛогинИПарольЗашифрованныйBase64 = СоздатьСтрокуBase64(Строка); |
|||
14
Галахад
гуру
20.05.19
✎
11:10
|
(8) Похоже используется синтаксис отправки единичного сообщения для отправки массовых сообщений.
|
|||
15
KIraA
20.05.19
✎
11:15
|
(14) Там в цикле всего один номер, поэтому сообщение единичное
|
|||
16
Garykom
гуру
20.05.19
✎
11:18
|
/app/smsgw/rest/v2/messages"
/app/smsgw/rest/v2/messages/" |
|||
17
KIraA
20.05.19
✎
11:26
|
(16) не помогло. Ошибка та же
|
|||
18
Garykom
гуру
20.05.19
✎
11:29
|
(17) Дело в том что ответ "400 Bad Request" возвращает nginx а не rest сервис за ним, дело не в json а в кривом url
|
|||
19
Garykom
гуру
20.05.19
✎
11:31
|
(18)+ Или в кривом самом post запросе http
|
|||
20
Garykom
гуру
20.05.19
✎
11:33
|
Content-Length почему нет?
|
|||
21
Garykom
гуру
20.05.19
✎
11:35
|
("Accept", "application/json, text/plain, */*")
это еще что за изврат? Покажи api там скорее всего просто "application/json" |
|||
22
bootini
20.05.19
✎
11:37
|
(17) Ставь Fiddler и лови там запрос и ответ, там в структуре будет описана ошибки или прочитай ответ как в (12) написано, получишь структура и на точке останова, посмотри содержимое с ошибкой.
В (12) вместо строки ЧтениеJSON.ОткрытьПоток(HTTPОтвет.ПолучитьТелоКакПоток()); твой ЧтениеJSON.ОткрытьФайл(Результат) |
|||
23
Garykom
гуру
20.05.19
✎
11:37
|
(21) Хотя это же формат ответа, обычно можно опускать и не указывать
|
|||
24
KIraA
20.05.19
✎
11:38
|
(21) эти данные предоставляет провайдер.
|
|||
25
KIraA
20.05.19
✎
11:40
|
Все поставила Fiddler, сделала несколько сообщений, отладила все остановы!!! в https://***/app/smsgw/rest/v2/batches.
ИИИИИ!!!!! Новая ошибка 401 HTTP/1.1 401 Unauthorized Капец |
|||
26
KIraA
20.05.19
✎
11:40
|
Провайдер говорит перевод логина и пароля правильное. Почему тогда нет авторизации?
|
|||
27
Garykom
гуру
20.05.19
✎
11:43
|
json покажи
|
|||
28
Garykom
гуру
20.05.19
✎
11:43
|
{
"client_message_id" : "236234857", "sender" : "SMSGW", "recipient" : "77010000000", "message_text" : "тест" } Такой? |
|||
29
Ёпрст
20.05.19
✎
11:44
|
(8) А где начало и конец массива ?
|
|||
30
Garykom
гуру
20.05.19
✎
11:45
|
(29) Там единичное без массива
|
|||
31
KIraA
20.05.19
✎
11:45
|
{
"messages": [ { "client_message_id" : "12345eed03", "sender" : "Проверка", "recipient" : "7хххххххх", "message_text" : "test 2" }, { "client_message_id" : "4db965485b4", "sender" : "Проверка", "recipient" : "7хххххххх", "message_text" : "test 3" } ] } |
|||
32
KIraA
20.05.19
✎
11:46
|
подскажите где тут скрин сохранить. я Вам фидлер скину
|
|||
33
Ёпрст
20.05.19
✎
11:48
|
(31) круто. И где в (8) формирование массива "messages": [ ] ?
|
|||
34
Garykom
гуру
20.05.19
✎
11:48
|
(31) Эээто же JSON не для единичного messages а для пакетного batches
|
|||
35
bootini
20.05.19
✎
11:48
|
(25) попробуй в base 64
Функция СтрокаВBase64(Строка) Строка = СтрЗаменить(Строка,Символ(10),""); Строка = СтрЗаменить(Строка,Символ(13),""); ДвоичныеДанныеДляПодписи = ПолучитьДвоичныеДанныеИзСтроки (Строка, КодировкаТекста.UTF8, Ложь); Base64 = Base64Строка(ДвоичныеДанныеДляПодписи); Base64 = стрзаменить(Base64,"77u/",""); Base64 = стрЗаменить(Base64,Символ(10),""); Base64 = стрЗаменить(Base64,Символ(13),""); Возврат Base64; КонецФункции // СтрокаВBase64() |
|||
36
Garykom
гуру
20.05.19
✎
11:49
|
(34)+ Должно быть ЗапросHTTP.АдресРесурса = "/app/smsgw/rest/v2/batches";
|
|||
37
KIraA
20.05.19
✎
11:50
|
(36) я же написала что поменяла на batches
в (25) Все поставила Fiddler, сделала несколько сообщений, отладила все остановы!!! в https://***/app/smsgw/rest/v2/batches. |
|||
38
Garykom
гуру
20.05.19
✎
11:51
|
(37) Да понял, просто зачем так перескакивать не сделав единичное пытаться пакетное.
|
|||
39
KIraA
20.05.19
✎
11:52
|
(35) кодирует так же буква в букву
|
|||
40
KIraA
20.05.19
✎
11:53
|
(38) уже незнаю просто что пробывать. Вот и пошла в пакет)))
|
|||
41
Ёпрст
20.05.19
✎
12:07
|
(0) а есть уверенность, что нужно ЗащищенноеСоединениеOpenSSL делать ?
|
|||
42
Garykom
гуру
20.05.19
✎
12:08
|
(41) https://api.kcell.kz/app/smsgw/rest/v2
если я правильно понял |
|||
43
KIraA
20.05.19
✎
12:11
|
(42) да оно
|
|||
44
Garykom
гуру
20.05.19
✎
12:11
|
Имхо я бы сделал все как в (0) только проверил что json правильный и добавил "Content-Length"
|
|||
45
KIraA
20.05.19
✎
12:17
|
(44) это еще что за параметр?
|
|||
46
Garykom
гуру
20.05.19
✎
12:17
|
(45) Размер файла/текста json
|
|||
47
Garykom
гуру
20.05.19
✎
12:29
|
Попробуй со своим кодом авторизации
|
|||
48
KIraA
20.05.19
✎
12:42
|
Переменная не определена (СпособВыбораСертификатаWindows)
ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(<<?>>СпособВыбораСертификатаWindows.Выбирать),Новый СертификатыУдостоверяющихЦентровWindows()); (Проверка: Сервер) |
|||
49
Garykom
гуру
20.05.19
✎
12:48
|
(48) убери лишнее
ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows()); |
|||
50
Garykom
гуру
20.05.19
✎
12:49
|
(49)+ Или перенеси на клиента
|
|||
51
KIraA
20.05.19
✎
12:57
|
Ошибка при вызове метода контекста (ОтправитьДляОбработки)
|
|||
52
KIraA
20.05.19
✎
13:01
|
ПолучитьПрокси("https") Это не надо ни где указать?
|
|||
53
Garykom
гуру
20.05.19
✎
13:01
|
(52) Если у вас инет через прокси то надо
|
|||
54
Garykom
гуру
20.05.19
✎
13:02
|
(53)+ И таймаут увеличь как у тебя в (0)
Соединение = Новый HTTPСоединение("***", ,, , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("https"), 60, Новый ЗащищенноеСоединениеOpenSSL); |
|||
55
KIraA
20.05.19
✎
13:03
|
Нет нет. Вот ошибка
Код состояния 401. Проверка не выполнена В прошлый раз файл ответа не указала |
|||
56
Garykom
гуру
20.05.19
✎
13:06
|
(55) У меня тоже самое ибо вот тут
HTTPЗапрос.Заголовки.Вставить("Authorization","Basic pxT3bdk4dGYXNzd29db4"); надо правильный свой хеш вставить вместо "pxT3bdk4dGYXNzd29db4" который я взял из примера их |
|||
57
Garykom
гуру
20.05.19
✎
13:11
|
"логин и пароль соединяются через двоеточие, кодируются в base64"
|
|||
58
KIraA
20.05.19
✎
13:12
|
ВОТТТ блин. Не было у меня двоеточия
|
|||
59
KIraA
20.05.19
✎
13:14
|
ОООООО СПАСИБО ВАМ добрый человек!!!!!!!!!! "Garykom"
|
|||
60
Garykom
гуру
20.05.19
✎
13:17
|
|
|||
61
KIraA
20.05.19
✎
13:22
|
АГА. Все отлично заработало!!!! Куда там плюсик Вам поставить? И номер телефона взять? (для помощи) :-)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |