|
1С и Селдон | ☑ | ||
---|---|---|---|---|
0
programmer1c
21.01.17
✎
19:43
|
Необходимо получит данные с сайта Селдон. Есть Апи интсрукция, но честно говоря мало,чем она мне помогает.
вот выдержка: 1.Для авторизации используется метод POST, для вызова остальных методов GET. 2. При авторизации сервис возвращает куки, при дальнейших вызовах в заголовках необходимо указывать полученные UserConnect, .SELDONAUTH. 4.1. Авторизация Метод: login (). Вызов: https://basis.myseldon.com/api/rest/loginUserName=user1&Password=12345 Для авторизации необходимо использовать метод POST. При использовании rest-клиента значения параметров «UserName» и «Password» необходимо передавать в теле запроса с использованием формата кодирования «application/x-www-form-urlencoded» Пишу типа такого, исходя из того что нагуглил по хттп и 1С: HTTPЗапрос = Новый HTTPЗапрос; HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive"); HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); HTTPЗапрос.АдресРесурса = "/api/rest/login?UserName=" + СокрЛП(Логин) + "&password=" + СокрЛП(Пароль); СоединениеHTTP = Новый HTTPСоединение("basis.myseldon.com",,,,,5,Новый ЗащищенноеСоединениеOpenSSL()); ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(HTTPЗапрос); КодСостояния = ОтветHTTP.КодСостояния; ТекстJSON = ОтветHTTP.ПолучитьТелоКакСтроку();// |
|||
1
programmer1c
21.01.17
✎
19:44
|
Получаю в конечном итоге крод ошибки 404 Not Found («не найдено»).
|
|||
2
programmer1c
21.01.17
✎
19:45
|
подскажите кто знает,ибо я совсем в этой теме некомпетентен
|
|||
3
mehfk
21.01.17
✎
20:14
|
Для авторизации необходимо использовать метод POST. При использовании rest-клиента значения параметров «UserName» и «Password» необходимо передавать в теле запроса с использованием формата кодирования «application/x-www-form-urlencoded»
|
|||
4
mehfk
21.01.17
✎
20:15
|
В теле запроса, Карл, в теле запроса!
|
|||
5
mehfk
21.01.17
✎
20:16
|
2000 рублей в кассу Мисты занесешь.
|
|||
6
programmer1c
21.01.17
✎
20:38
|
в теле запроса.как это сделать?
2000 рублей в кассу Мисты занесешь. - что это утверждение вопрос? |
|||
7
eks1985
21.01.17
✎
21:00
|
(6) Насколько я помню, что то вроде этого
HTTPЗапрос.УстановитьТелоИзСтроки(ТутСтрока); |
|||
8
programmer1c
21.01.17
✎
21:26
|
понимаю что типа такого надо писать
АдресСтраницы = "https://basis.myseldon.com/api/rest/"; НТТР = Новый HTTPСоединение("basis.myseldon.com"); Попытка //Формируем HTTP запрос ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницы, ЗаголовкиHTTP); //Устанавливает строку, из которой будет прочитано тело POST-запроса. ЗапросHTTP.УстановитьТелоИзСтроки(ТелоPOSTЗапроса, КодировкаТекста.ANSI); //Ответ от сервера получим в возвращаемом значении типа HTTPОтвет ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP); ТекстJSON = ОтветHTTP.ПолучитьТелоКакСтроку(); Исключение //УстановитьHTML("Неудачная попытка соединения с " + Объект.СерверПриемник + ": " + ОписаниеОшибки()); Возврат; КонецПопытки; |
|||
9
programmer1c
21.01.17
✎
21:27
|
ЗаголовкиHTTP = Новый Соответствие;
ЗаголовкиHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded"); ТелоPOSTЗапроса = ""; ТелоPOSTЗапроса = ТелоPOSTЗапроса + "&UserName=" + Строка(Логин); ТелоPOSTЗапроса = ТелоPOSTЗапроса + "&password=" + Строка(Пароль); АдресСтраницы = "https://basis.myseldon.com/api/rest/"; НТТР = Новый HTTPСоединение("basis.myseldon.com"); Попытка //Формируем HTTP запрос ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницы, ЗаголовкиHTTP); //Устанавливает строку, из которой будет прочитано тело POST-запроса. ЗапросHTTP.УстановитьТелоИзСтроки(ТелоPOSTЗапроса, КодировкаТекста.ANSI); //Ответ от сервера получим в возвращаемом значении типа HTTPОтвет ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP); ТекстJSON = ОтветHTTP.ПолучитьТелоКакСтроку(); Исключение //УстановитьHTML("Неудачная попытка соединения с " + Объект.СерверПриемник + ": " + ОписаниеОшибки()); Возврат; КонецПопытки; |
|||
10
programmer1c
21.01.17
✎
21:28
|
но как именно не знаю,как верно адрес страницы написать и надо ли его писать;как этот юзер в теле запроса должен выглядеть?
|
|||
11
eks1985
21.01.17
✎
22:39
|
(10)
For application/x-www-form-urlencoded, the body of the HTTP message sent to the server is essentially one giant query string -- name/value pairs are separated by the ampersand (&), and names are separated from values by the equals symbol (=). An example of this would be: MyVariableOne=ValueOne&MyVariableTwo=ValueTwo Теперь понятно как? |
|||
12
programmer1c
21.01.17
✎
23:27
|
вот та надо:
HTTPЗапрос = Новый HTTPЗапрос; HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive"); HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); HTTPЗапрос.АдресРесурса = "/api/rest/login?"; ТекстТелаЗапроса = "userName="+Логин+"&password="+Пароль; HTTPЗапрос.УстановитьТелоИзСтроки(ТекстТелаЗапроса,КодировкаТекста.UTF8); СоединениеHTTP = Новый HTTPСоединение("basis.myseldon.com",,,,,5,Новый ЗащищенноеСоединениеOpenSSL()); ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(HTTPЗапрос); КодСостояния = ОтветHTTP.КодСостояния; ТекстJSON = ОтветHTTP.ПолучитьТелоКакСтроку(); |
|||
13
programmer1c
21.01.17
✎
23:28
|
но он просто возвращает саксесс;
а по инструкции пишут,что 2. При авторизации сервис возвращает куки, при дальнейших вызовах в заголовках необходимо указывать полученные UserConnect, .SELDONAUTH. что за куки и как его получить? |
|||
14
programmer1c
21.01.17
✎
23:35
|
вот ответ
{ "status": { "methodStatus": "Success", "paramsCheckError": null, "itemsFound": 0, "paramsAreValid": true } } где взять это куки? |
|||
15
tridog
21.01.17
✎
23:39
|
(14) в заголовках ответа будет Set-Cookie
|
|||
16
programmer1c
21.01.17
✎
23:45
|
всем спасибо.вот,ребята, может кому пригодится окончательный вопрос на авторизацию
HTTPЗапрос = Новый HTTPЗапрос; HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive"); HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); HTTPЗапрос.АдресРесурса = "/api/rest/login?"; ТекстТелаЗапроса = "userName="+Логин+"&password="+Пароль; HTTPЗапрос.УстановитьТелоИзСтроки(ТекстТелаЗапроса,КодировкаТекста.UTF8); СоединениеHTTP = Новый HTTPСоединение("basis.myseldon.com",,,,,5,Новый ЗащищенноеСоединениеOpenSSL()); ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(HTTPЗапрос); КодСостояния = ОтветHTTP.КодСостояния; ТекстJSON = ОтветHTTP.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); Set_Cookie = ОтветHTTP.Заголовки.Получить("Set-Cookie"); |
|||
17
programmer1c
22.01.17
✎
01:02
|
В продолжение темы теперь мне нужно методы запросы методом гет отправлять:
пишу следующее: HTTPЗапрос = Новый HTTPЗапрос; HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); HTTPЗапрос.Заголовки.Вставить("UserConnect", UserConnect); HTTPЗапрос.Заголовки.Вставить(".SELDONAUTH", SELDONAUTH); HTTPЗапрос.АдресРесурса = "/api/rest/get_adress_tree_ref"; СоединениеHTTP = Новый HTTPСоединение("basis.myseldon.com",,,,,5,Новый ЗащищенноеСоединениеOpenSSL()); ОтветHTTP = СоединениеHTTP.Получить(HTTPЗапрос); КодСостояния = ОтветHTTP.КодСостояния; ТекстJSON = ОтветHTTP.ПолучитьТелоКакСтроку(); |
|||
18
programmer1c
22.01.17
✎
01:04
|
пишет "доступ отклонен" в ответе.
что опять не так? если написать это в адресной строке бразура basis.myseldon.com/api/rest/get_adress_tree_ref, то инфа появится, а из С не хочет |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |