Имя: Пароль:
1C
 
Проблема с post и get запросами к ФССП
0 s7cret
 
26.02.18
13:23
Добрый день. Если кто работал с post и get запросами к серверу подскажет что я не так делаю.
В общем ресурс это ФССП, точнее их API  для работы с их базой.
Пытаюсь послать запрос на сервер  Ключ - ZHtMJ2L0GOE3,  параметры задал, ответ в любом случае "403",  ошибка доступа.

Пример из документации тоже не меняет ситуации https://api-ip.fssprus.ru/swagger

Пример через POST

СтрокаПараметров = " { ""token"": ""ZHtMJ2L0GOE3"", ""request"": [ { ""type"": 1, ""params"": { ""firstname"": ""КИРИЛЛ"", ""lastname"": ""МИТРОФАНОВ"", ""secondname"": """", ""region"": ""0"", ""birthdate"": """" } }}";
Сервер = "api-ip.fssprus.ru";      Ресурс = "/api/v1.0/search/group";
HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров);
HTTPЗапрос.АдресРесурса = Ресурс;
ssl = Новый ЗащищенноеСоединениеOpenSSL;
HTTP = Новый HTTPСоединение(Сервер,,,,,,ssl);  
ИмяВыходногоФайла = ПолучитьИмяВременногоФайла();
HTTPЗапрос.Заголовки.Вставить("accept", "application/json");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
ОтветHTTP = HTTP.ОтправитьДляОбработки(HTTPЗапрос,ИмяВыходногоФайла);


Пример через GET

СтрокаПараметров = "?token=ZHtMJ2L0GOE31&region=0&firstname=%D0%9A%D0%98%D0%A0%D0%98%D0%9B%D0%9B&secondname=%D0%98%D0%93%D0%9E%D0%A0%D0%95%D0%92%D0%98%D0%A7&lastname=%D0%9C%D0%98%D0%A2%D0%A0%D0%9E%D0%A4%D0%90%D0%9D%D0%9E%D0%92&birthdate=08.04.1981";
Сервер = "api-ip.fssprus.ru";
Ресурс = "/api/v1.0/search/physical";  
HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров);
HTTPЗапрос.АдресРесурса = Ресурс;    
ssl = Новый ЗащищенноеСоединениеOpenSSL;
HTTP = Новый HTTPСоединение(Сервер,,,,,,ssl);  
ОтветHTTP = HTTP.Получить(HTTPЗапрос);


В двух случаях в отчете код отчета сервер 403 "Доступ к ресурсу запрещен"
А вот через com все норм, вопрос что не так я делаю?)


Пример через COM(GET)

WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"utf-8");
WinHttp.Open("GET", "https://api-ip.fssprus.ru/api/v1.0/search/physical?token=ZHtMJ2L0GOE31®ion=0&firstname=КИРИЛЛ&secondname=ИГОРЕВИЧ&lastname=МИТРОФАНОВ&birthdate=08.04.1981";;);
WinHttp.Send();
РезультатСтр = WinHttp.ResponseText();
1 s7cret
 
26.02.18
16:11
?
2 s7cret
 
26.02.18
16:45
+
3 FIXXXL
 
26.02.18
17:12
(0) ну во-первых есть разница в передаваемых параметрах, Отчество, ДатаРождения
во-вторых в первом примере попробуй добавить
"physical="
HTTPЗапрос.УстановитьТелоИзСтроки("physical="+СтрокаПараметров);
4 s7cret
 
26.02.18
17:17
(3) Попробовал так но ошибка осталась 403


СтрокаПараметров = " { ""token"": ""ZHtMJ2L0GOE3"", ""request"": [ { ""type"": 1, ""params"": { ""firstname"": ""КИРИЛЛ"", ""lastname"": ""МИТРОФАНОВ"", ""secondname"": """", ""region"": ""0"", ""birthdate"": """" } }}";
Сервер = "api-ip.fssprus.ru";      Ресурс = "/api/v1.0/search/group";
HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.УстановитьТелоИзСтроки("physical="+СтрокаПараметров);    
HTTPЗапрос.АдресРесурса = Ресурс;
ssl = Новый ЗащищенноеСоединениеOpenSSL;
HTTP = Новый HTTPСоединение(Сервер,,,,,,ssl);  
ИмяВыходногоФайла = ПолучитьИмяВременногоФайла();
HTTPЗапрос.Заголовки.Вставить("accept", "application/json");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
ОтветHTTP = HTTP.ОтправитьДляОбработки(HTTPЗапрос,ИмяВыходногоФайла);    

По Отчеству и Дата рождения не проблема, в противном случае была бы ошибка 400 или 401 согласно документации.
5 s7cret
 
26.02.18
17:20
(3) Такое чувство, как будто он не видит токен.
6 dezss
 
26.02.18
17:25
в первом нет даты рождения и регион - строка, хз, важно ли это
7 FIXXXL
 
26.02.18
17:26
(4)  ну попробуй строку собрать руками, что бы она стала похожа на строку ссылки из третьего примера
прям вот в Ресурс напиши "/api/v1.0/search/"+СтрокаРуками

кстати, у тебя в первом примере
Ресурс = "/api/v1.0/search/group";
а в третьем никакого "group"
8 dezss
 
26.02.18
17:26
(6) + просто может валиться при валидации
9 dezss
 
26.02.18
17:27
(7) первый и третий - это разные запросы, к разным ресурсам АПИ.
10 s7cret
 
26.02.18
17:28
(7)  В первом через post для группового запроса по физ. лицам.

А во втором и третьем get для запроса по одному физ лицу

как в api описано

https://api-ip.fssprus.ru/swagger
11 FIXXXL
 
26.02.18
17:29
(9) а где в третьем SSL?
12 FIXXXL
 
26.02.18
17:30
(10) да, уже понял :)
13 dezss
 
26.02.18
17:30
(е-мое!!!)

В Гете нет тела!!!!
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров);

Надо вот так:
HTTPЗапрос.АдресРесурса = Ресурс + СтрокаПараметров;
14 dezss
 
26.02.18
17:31
(13) это во втором твоем запросе, если что
15 s7cret
 
26.02.18
17:31
(8) самое странное что через com точно такая строка, но как понимаю технологии разные.  

Пробовал залогиниться с помощью логина и пароля, проблема не решается так же. В самом api описано что доступ предоставляется только по переданному ключу.
16 dezss
 
26.02.18
17:31
(15) не такая....
читай (13)
17 s7cret
 
26.02.18
17:35
(13) Ошибка такая же 403 ,  и так пробовал и еще раз проверил)

СтрокаПараметров = "?token=ZHtMJ2L0GOE31&region=0&firstname=%D0%9A%D0%98%D0%A0%D0%98%D0%9B%D0%9B&secondname=%D0%98%D0%93%D0%9E%D0%A0%D0%95%D0%92%D0%98%D0%A7&lastname=%D0%9C%D0%98%D0%A2%D0%A0%D0%9E%D0%A4%D0%90%D0%9D%D0%9E%D0%92&birthdate=08.04.1981";
Сервер = "api-ip.fssprus.ru";
Ресурс = "/api/v1.0/search/physical";  
HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.АдресРесурса = Ресурс + СтрокаПараметров;    
HTTP = Новый HTTPСоединение(Сервер,,,,,,Новый ЗащищенноеСоединениеOpenSSL);  
ОтветHTTP = HTTP.Получить(HTTPЗапрос);
18 dezss
 
26.02.18
17:36
(17) хм...а почему у тебя ЗащищенноеСоединениеOpenSSL, а не просто ЗащищенноеСоединение?
19 dezss
 
26.02.18
17:37
(18) тьфу....дел...вечер, домой уже хочется)
20 s7cret
 
26.02.18
17:59
++
21 s7cret
 
26.02.18
18:42
Компактный get запрос, ошибка та же  403


HTTP = Новый HTTPСоединение("api-ip.fssprus.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL);  
ОтветHTTP = HTTP.Получить(Новый HTTPЗапрос("/api/v1.0/result?token=ZHtMJ2L0GOE3&task=cc610b85-7190-4576-8357-c39b2a29ae16"));
22 Вафель
 
26.02.18
18:44
ну так доступ же запрещен, что тебе не понятно то?
Логин и пароль не верный значит
23 s7cret
 
26.02.18
18:50
(22) Логин и пароль не влияют так как в варианте через COM(GET)

WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"utf-8");
WinHttp.Open("GET", "https://api-ip.fssprus.ru/api/v1.0/search/physical?token=ZHtMJ2L0GOE31®ion=0&firstname=КИРИЛЛ&secondname=ИГОРЕВИЧ&lastname=МИТРОФАНОВ&birthdate=08.04.1981";;;);
WinHttp.Send();
РезультатСтр = WinHttp.ResponseText();

Все на ок и без них. В документации описано что нет необходимости логинится, достаточно передавать токен, но все же проверил ошибка та же код 403(пробовал и ранее)
24 s7cret
 
26.02.18
19:39
+
25 s7cret
 
26.02.18
21:10
ап+
26 oleg_km
 
26.02.18
22:26
ну в фиддлере сравните, что отсылает ком, а что 1С
27 Fram
 
26.02.18
22:33
(26) я ему предлагал уже в его прошлой ветке либо забить и использовать com либо отловить пакеты и посмотреть отличие (в результате все равно забить). но ежики кололись ...
28 Fram
 
26.02.18
22:36
(0) попробуй, в поддержку 1С или этого сервиса отослать свой вопрос. может кто нить из них даст внятный ответ.
29 Джексон
 
27.02.18
08:49
s7cret, давай уже третью ветку по этому вопросу заводи. Пора.
30 s7cret
 
27.02.18
10:00
(27) тут уже дело принципа), думал просто что я не учет чего то.
31 s7cret
 
27.02.18
10:01
(29) не время для зй ветки,  я 2 создал чтобы все имеющиеся данные из первой структурировать. Данных для 3й недостаточно)
32 dezss
 
27.02.18
10:38
Вы будете смеяться, но я разобрался)))
Надо в заголовках установить
    Заг.Вставить("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36");

Они не шлют ответов 1с-ке))))
33 dezss
 
27.02.18
10:53
Отпишись, у тебя получилось?
34 Fram
 
27.02.18
11:25
(32) блин, точно! наталкивался же уже на такое. забыл.
Даже вот такой заголовок прокатывает
    Заголовки.Вставить("User-Agent", "xuy");
35 Fram
 
27.02.18
11:25
Главное чтоб ключ User-Agent был в заголовке
36 Джексон
 
27.02.18
11:29
(32) Ура. Слава Герою, который смог запустить Fiddler.
37 dezss
 
27.02.18
11:50
(34) (35) неа, ключ есть, но в нем что-то вроде 1C+Enterprize и его не пропускает.
(36) И тебя туда же. Просто появился повод слегка изучить этот момент. А вот ты не смог)
38 Fram
 
27.02.18
11:51
(37) у меня абсолютно любой произвольный User-Agent проходит
39 Джексон
 
27.02.18
11:52
(37) А оно мне надо? Я сюда деградировать захожу, а не ваши ребусы решать.
40 s7cret
 
27.02.18
11:54
(32) Это круто !!) ГИП ГИП УРА УРА УРА,
Как я понял проверка с браузер запрос происходит или нет?
41 dezss
 
27.02.18
11:56
(38) именно на этот сайт?
ну хз, у меня 1с-ка сама определяла этот заголовок, тогда возвращался 403, а как только копирнул заголовок из хрома, то все стало гут.
42 Fram
 
27.02.18
11:58
(41) попробуй любой произвольный набор букв
43 s7cret
 
27.02.18
11:58
User Agent — это клиентское приложение, использующее определённый сетевой протокол. Термин обычно используется для приложений, осуществляющих доступ к веб-сайтам, таким как браузеры, поисковые роботы (и другие «пауки»), мобильные телефоны и другие устройства.
44 dezss
 
27.02.18
11:58
(40) как один товарищ рассказал, обычно этот заголовок ни на что не влияет, но если на серваке поставить усиленную безопасность, то они отправляют ответы только при определенных значениях этого заголовка. По крайней мере я понял его объяснения как-то так.
45 dezss
 
27.02.18
12:01
(42) ну да, проходит.
впадлу опять проксю запускать, чтоб смотреть что конкретно 1с-ка в этот заголовок добавляла.
46 dezss
 
27.02.18
12:02
(42) поставь такой:
Заг.Вставить("User-Agent","1C+Enterprise");
)))
47 Fram
 
27.02.18
12:06
(46) да, забавно.. заворачивает именно на этом заголовке. все остальное, даже полный бред пропускает их nginx
48 dezss
 
27.02.18
12:19
(47) даже если в бреде где-то встречается 1C+Enterprise, то заворачивает на 403.
49 Fram
 
27.02.18
12:32
На лицо явный саботаж ))
50 Fram
 
27.02.18
12:38
моему возмущению нет предела!
51 s7cret
 
27.02.18
12:40
(49) Кто то против 1с походу) может заспамили их.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс