Имя: Пароль:
1C
1С v8
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, то инфа появится, а из С не хочет
Программист всегда исправляет последнюю ошибку.