|
Как складывается HTTP адрес при вызове ВызватьHTTPМетод | ☑ | ||
---|---|---|---|---|
0
ArturDoo
07.05.21
✎
09:44
|
Добрый день. Нужно обратиться и получить данные от ХТТП ресурса (метод ГЕТ). Выдает то 404, то 302. Подскажите, как складывается адрес при выполнении это процедуры.
Пишу так: Ответ = Соединение.ВызватьHTTPМетод(Метод, ЗапросHTTP). Как вы можете понять из ссылок, я хочу получить контрагентов из амоCRM ЗапросHTTP.АдресРесурса = "/contacts/?type=json" Строка Соединение.Сервер = "a****.amocrm.ru" Строка Что не так? |
|||
1
ДенисЧ
07.05.21
✎
09:48
|
А зачем через ВызватьHTTPМетод ?
Если просто HTTPСоединение.Получить("/contacts/?type=json") ? |
|||
2
ArturDoo
07.05.21
✎
09:50
|
(1) На эту процедуру переходит ещё, когда логинюсь, а потом хочу на неё отправку (пост) завязать, чтоб лишний код не плодить
|
|||
3
Kassern
07.05.21
✎
09:53
|
(1) а чем вам не нравится данный метод? Все тоже самое Ответ=Соединение.ВызватьHTTPМетод("GET",ЗапросHTTP);
|
|||
4
Kassern
07.05.21
✎
09:54
|
(2) дело не в этом методе, дело в том что вы передается, либо куда передаете
|
|||
5
ДенисЧ
07.05.21
✎
09:54
|
(3) тем, что у ТС с ним возникли затруднения ))))
|
|||
6
Kassern
07.05.21
✎
09:54
|
(4) аунтификация нужна для этого ресурса?
|
|||
7
Kassern
07.05.21
✎
09:55
|
(5) ну потому что ошибка только на моменте отправки и возникает, тоже самое у него будет и при .Получить("/contacts/?type=json")
|
|||
8
Kassern
07.05.21
✎
09:56
|
(0) по поводу ssl не забыли?
|
|||
9
ArturDoo
07.05.21
✎
09:58
|
(4) Я думаю нет, но узнаю 100%, только когда перешагну 404))
|
|||
10
Kassern
07.05.21
✎
09:58
|
(0) Почитайте внимательно https://www.amocrm.ru/developers/content/crm_platform/api-reference
Особенно про https://www.amocrm.ru/developers/content/oauth/oauth |
|||
11
Kassern
07.05.21
✎
10:00
|
Для того чтобы получить список контактов своего аккаунта надо как минимум авторизоваться, у вас я не вижу даже попытки этого сделать. Если это публичный метод без авторизации, тогда вы можете тупо в браузере вбить строку гет запроса и получить данные
|
|||
12
ArturDoo
07.05.21
✎
10:03
|
(10) (11)
Функция ИнициализацияПодключенияOAuth2(ОбновитьТокен = Ложь) Экспорт Попытка ПараметрыПодключения = РегистрыСведений.ns_НастройкиCRM.ПолучитьСписокНастроек(); Соединение = ПолучитьHTTPСоединение(ПараметрыПодключения); Если Соединение = Неопределено Тогда Возврат ЗаписатьОшибкуВЖурналCRM("ИнициализацияПодключения", "Ошибка получения соединения для получения Code."); КонецЕсли; ЗапросHTTP = ЗапросHTTP_AuthorizeОAuth2(ПараметрыПодключения, ОбновитьТокен); Ответ = Соединение.ВызватьHTTPМетод("POST", ЗапросHTTP); ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(); ТелоЗапроса = ЗапросHTTP.ПолучитьТелоКакСтроку(); ДанныеОтвета = ПрочитатьCrmJSON(ТелоОтвета); Если Ответ.КодСостояния = 200 ИЛИ Ответ.КодСостояния = 204 Тогда Если НЕ ЗначениеЗаполнено(ОбработатьHTTPОтветOAuth2(ДанныеОтвета, Ответ.КодСостояния, ТелоОтвета)) Тогда Возврат ЗаписатьОшибкуВЖурналCRM("ИнициализацияПодключения", "Ошибка запроса Авторизации." + Символы.ПС + ФорматироватьJSON(ТелоОтвета) + Символы.ПС + "Запрос:" + Символы.ПС + ТелоЗапроса); КонецЕсли; Иначе Если ОбновитьТокен = Ложь Тогда ИнициализацияПодключенияOAuth2(Истина); КонецЕсли; Возврат ЗаписатьОшибкуВЖурналCRM("ИнициализацияПодключения", "Ошибка запроса Авторизации. Код состояния = " + Ответ.КодСостояния + Символы.ПС + ФорматироватьJSON(ТелоОтвета) + Символы.ПС + "Запрос:" + Символы.ПС + ТелоЗапроса); КонецЕсли; Cookie = Ответ.Заголовки.Получить("Set-Cookie"); access_token = ДанныеОтвета["access_token"]; refresh_token = ДанныеОтвета["refresh_token"]; РегистрыСведений.ns_НастройкиCRM.ЗаписатьНастройку(Перечисления.ns_ВидыНастроекCRM.Cookie, Cookie, ПараметрыПодключения); РегистрыСведений.ns_НастройкиCRM.ЗаписатьНастройку(Перечисления.ns_ВидыНастроекCRM.AccessToken, access_token, ПараметрыПодключения); РегистрыСведений.ns_НастройкиCRM.ЗаписатьНастройку(Перечисления.ns_ВидыНастроекCRM.RefreshToken, refresh_token, ПараметрыПодключения); Исключение ЗаписатьОшибкуВЖурналCRM("ИнициализацияПодключения", ОписаниеОшибки()); КонецПопытки; Возврат Истина; КонецФункции |
|||
13
ArturDoo
07.05.21
✎
10:03
|
Инициализация выполняется
|
|||
14
ArturDoo
07.05.21
✎
10:04
|
Всё проходит без ошибок и я получаю атокин и ртокин
|
|||
15
Kassern
07.05.21
✎
10:07
|
(14) а метод точно GET у вас передается? Пробовали через какую нить прогу сделать подобный запрос, например fiddler, postman?
|
|||
16
ArturDoo
07.05.21
✎
10:14
|
Пробовал через RESTED Гетом тащить, всё ок
|
|||
17
ArturDoo
07.05.21
✎
10:16
|
Подскажите, как ссылка собирается ВызватьHTTPМетод, учитывая данные из (0)
|
|||
18
ArturDoo
07.05.21
✎
10:17
|
Как я понимаю, она должна выглядеть так: a****.amocrm.ru/contacts/?type=json. Правильно?
|
|||
19
Kassern
07.05.21
✎
10:18
|
(18) Блин в вы что в метод то пихаете?))
|
|||
20
Kassern
07.05.21
✎
10:18
|
(19) В апишке же /api/v4/contacts/?type=json так?
|
|||
21
Kassern
07.05.21
✎
10:19
|
(20) попробуйте Ответ = Соединение.ВызватьHTTPМетод("GET","/api/v4/contacts/?type=json");
|
|||
22
ArturDoo
07.05.21
✎
10:19
|
(18)GET
|
|||
23
Kassern
07.05.21
✎
10:25
|
(18) зачем вы "/api/v4/" обрезаете из метода?? вот же документация https://www.amocrm.ru/developers/content/crm_platform/contacts-api#contacts-list
|
|||
24
ArturDoo
07.05.21
✎
10:30
|
//Возврат ns_Core.ОтправитьЗапросВCRM("GET", "/api/v4/contacts/", ДатаСверки);
///// Возврат ns_Core.ОтправитьЗапросВCRM("GET", "/contacts/", ДатаСверки); /////// Было так. Я вас и спрашиваю, как функция формирует ссылку. Убрал апи, тк выдавало 404 |
|||
25
ArturDoo
07.05.21
✎
10:31
|
(21) Второй параметр функции должен быть запрос, а не строка
|
|||
26
Kassern
07.05.21
✎
10:33
|
(24) У вас в соединении должен быть лишь адрес сервера. Грубо говоря только "www.amocrm.ru". Все что дальше, должно быть в строке запроса.
|
|||
27
Kassern
07.05.21
✎
10:35
|
(26) Сделайте так.
HTTPЗапрос=Новый HTTPЗапрос("/api/v4/contacts/?type=json",Заголовки)//Заголвки указать если нужно Ответ=Соединение.ВызватьHTTPМетод("GET",HTTPЗапрос); |
|||
28
Kassern
07.05.21
✎
10:36
|
(27) А в соединении в адресе сервера у вас должен быть только домен к примеру:
Соединение=Новый HTTPСоединение("www.amocrm.ru",ПортЕслиНужен,,,,,SSL); |
|||
29
Kassern
07.05.21
✎
10:37
|
(28) ну или какой там домен для апишки вашей
|
|||
30
Kassern
07.05.21
✎
10:38
|
(27) Попробуйте еще убрать "/?type=json" из запроса. Оставьте только /api/v4/contacts
|
|||
31
Kassern
07.05.21
✎
10:39
|
(30) и где вы вообще этот параметр нашли, там же только доступные:
with string Данный параметр принимает строку, в том числе из нескольких значений, указанных через запятую. Данный метод поддерживает следующие параметры. page int Страница выборки limit int Количество возвращаемых сущностей за один запрос (Максимум – 250) query string|int Поисковый запрос (Осуществляет поиск по заполненным полям сущности) filter object Фильтр. Подробней про фильтры читайте в отдельной статье order object Сортировка результатов списка. Доступные поля для сортировки: updated_at, id. Доступные значения для сортировки: asc, desc. Пример: /api/v4/contacts?order[updated_at]=asc |
|||
32
Kassern
07.05.21
✎
10:40
|
(31) Тип данных который вы хотите получить передается скорее всего тут в заголовках
|
|||
33
Kassern
07.05.21
✎
10:41
|
(32) можно попробовать указать
Заголовки=Новый соответсвие(); Заголовки.Вставить("Content-type", "application/json"); |
|||
34
ArturDoo
07.05.21
✎
10:42
|
(27)
Ошибка запроса Авторизации. Код состояния = 404 { "detail": "Cannot GET https://a*****.amocrm.ru/contacts/?type=json!", "status": 404, "type": "https://httpstatus.es/404", "title": "Not Found" } Тоже, что было при: //Возврат ns_Core.ОтправитьЗапросВCRM("GET", "/api/v4/contacts/", ДатаСверки); |
|||
35
Kassern
07.05.21
✎
10:43
|
(34) уберите ?type=json!",
|
|||
36
Kassern
07.05.21
✎
10:45
|
(35) В общем как то так попробуйте:
Соединение=Новый HTTPСоединение("www.amocrm.ru(либо какой там у вас домен апи)",,,,,,SSL); Заголовки=Новый соответсвие(); Заголовки.Вставить("Content-type", "application/json"); HTTPЗапрос=Новый HTTPЗапрос("/api/v4/contacts",Заголовки);//Заголвки указать если нужно Ответ=Соединение.ВызватьHTTPМетод("GET",HTTPЗапрос); |
|||
37
Kassern
07.05.21
✎
10:48
|
(36) ну и про авторизацию не забывать, я соединение написал с доменом, чтобы понятно было, что туда передавать, не нужно в соединение пихать www.amocrm.ru/api/v4 и тому подобное
|
|||
38
ArturDoo
07.05.21
✎
11:07
|
Дошёл до 401) Спасибо большое. Не проконсультируете насчет авторизации? В соединение предаю пароль, логин, но кидает в ответ 401. Что ему ещё надо?
|
|||
39
Kassern
07.05.21
✎
11:20
|
(38) я так понял ты получил токен нужный. А дальше тебе нужно его передавать в заголовках. Например:
Заголовки.Вставить("Authorization: Bearer", access_token); |
|||
40
Kassern
07.05.21
✎
11:21
|
(39) главное следить за сроком жизни (писать в какой нить РС), Если истекает, то получать новый. Можно рег заданием сделать
|
|||
41
Kassern
07.05.21
✎
11:21
|
(40) либо при запросе, проверять срок жизни, если истек, получать новый
|
|||
42
ArturDoo
07.05.21
✎
12:38
|
(41) Сделал так, опять где-то ошибся?
AccessToken = Новый Соответствие; AccessToken.Вставить("Authorization: Bearer", ЗначениеAccessToken); HTTPЗапрос=Новый HTTPЗапрос("/api/v4/contacts",AccessToken); Ответ=Соединение.ВызватьHTTPМетод("GET",HTTPЗапрос); |
|||
43
Kassern
07.05.21
✎
12:39
|
(42) Токен верный получен? У него срок жизни есть, он актуальный?
|
|||
44
Kassern
07.05.21
✎
12:40
|
(42) сейчас вроде все верно написано, главное чтобы токен был верный в значении заголовка
|
|||
45
Kassern
07.05.21
✎
12:41
|
(42) и лучше не называть заголовки AccessToken. Так как помимо токена туда можно много чего передавать. Например контент тип и т.д.
|
|||
46
Kassern
07.05.21
✎
12:42
|
(45) но это вкусовщина, в любом случае все должно работать, если токен верный
|
|||
47
arsik
гуру
07.05.21
✎
12:43
|
(42) Может соединение нужно сначала сбросить?
|
|||
48
ArturDoo
07.05.21
✎
12:48
|
Токен точно верный, перед тестом получил новый. Точно всё правильно передаю?
|
|||
49
arsik
гуру
07.05.21
✎
12:50
|
(48) ВОт так надо
AccessToken = Новый Соответствие; AccessToken.Вставить("Authorization","Bearer "+ЗначениеAccessToken); |
|||
50
arsik
гуру
07.05.21
✎
12:56
|
+ (49) Вот же пример готовый https://i.imgur.com/6vj5boG.png
Соответствие при запросе превратится в "Ключ:Значение" |
|||
51
Kassern
07.05.21
✎
13:10
|
(50) блин точно, я не так копирнул ему ключ))
|
|||
52
ArturDoo
07.05.21
✎
13:48
|
(49) (50) (51) Спасибо большое, так работает))
|
|||
53
arsik
гуру
07.05.21
✎
14:12
|
(52) На будущее, для отладки таких вещей нужно fiddler-ом воспользоватся ну или https://httpbin.org/.
Например запрос на https://httpbin.org/get вернет в ответе твой запрос с заголовками и прочим. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |