Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Не взлетает http соединение

Не взлетает http соединение
Я
   Timur2019
 
14.08.19 - 14:35
Привет всем. Пытаюсь подружить 1с УТ 11 с сайтом по api. Код такой :

     HTTPСоединение =  Новый HTTPСоединение("xn----7sbgfs5baxh7jc.xn--p1ai",80);     
    
     ТекстЗапроса = "http://xn----7sbgfs5baxh7jc.xn--p1ai/SearchService/GetBrands?article={1004110004}&withoutTransit={true}";;    
    
     HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса);
    
     //Login + ":" +Password
    
     СтрокаАвторизации = СокрЛП(Объект.Логин) + ":" + СокрЛП(Объект.Пароль);    
    
     // на входе вот такая строка : "НашЛогин:НашПароль"
    
     СтрокаАвторизацииBASE64 = ПолучитьСтрокуBase64(СтрокаАвторизации);
    
     // на выходе строка в base64: 77u/YW1pcm92c3VyZW5AcmFtYmxlci5ydTpPc3JhbTY3Mg==
    
     HTTPЗапрос.Заголовки.Вставить("Authorization", "Basic "+СтрокаАвторизацииBASE64);
     HTTPЗапрос.Заголовки.Вставить("Accept", "application/json");
     HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
         HTTPЗапрос.Заголовки.Вставить("Host", "xn----7sbgfs5baxh7jc.xn--p1ai/");

         Ответ = HTTPСоединение.Получить(HTTPЗапрос);  

     Сообщить("Код результата: " + Ответ.КодСостояния);    
    
     ОтветJSON = Ответ.ПолучитьТелоКакСтроку("UTF-8") ;         
    
     Сообщить("Ответ: " + ОтветJSON);

    В ответе приходит код ошибки 400 - Bad Request :- очевидно неправильный синтаксис запроса.
    Строка запроса из документации такая : http://xn----7sbgfs5baxh7jc.xn--p1ai/SearchService/GetBrands?article={article}&withoutTransit=={true/false}  
  
    Что я делаю не так ?
 
 
   Garykom
 
1 - 14.08.19 - 14:43
1. Если начать читать мануалы то
2. ТекстЗапроса = "/SearchService/GetBrands?article={1004110004}&withoutTransit={true}"
   ГдеСобакаЗарыта
 
2 - 14.08.19 - 14:44
"Что я делаю не так?" Ты гуглом не пользуешься, обязательно нужно гуглить, прежде чем писать на форум
Обмен между базами через http-сервис - КодСостояния = 403
   Timur2019
 
3 - 14.08.19 - 14:48
Спасибо :)
   Timur2019
 
4 - 14.08.19 - 15:05
Не -  тоже самое , сделал так :

  HTTPСоединение =  Новый HTTPСоединение("xn----7sbgfs5baxh7jc.xnp1ai",80);     
  ТекстЗапроса = "/SearchService/GetBrands?article={1004110004}&withoutTransit=={true}" ;      
  HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса);

  Та - же  ошибка.
   Timur2019
 
5 - 14.08.19 - 15:23
up
   Timur2019
 
6 - 14.08.19 - 15:34
В итоге код выглядит вот так :    
Но не взлетает.
    
         HTTPСоединение =  Новый HTTPСоединение("xn----7sbgfs5baxh7jc.xn--p1ai",80);     
     
     ТекстЗапроса = "/SearchService/GetBrands?article={1004110004}&withoutTransit={true}"; 
     
     HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса);
     
    //Login + ":" +Password 

     
     СтрокаАвторизации = СокрЛП(Объект.Логин) + ":" + СокрЛП(Объект.Пароль);    
     
    // на входе вот такая строка : "НашЛогин:НашПароль" 

     
     СтрокаАвторизацииBASE64 = ПолучитьСтрокуBase64(СтрокаАвторизации);
     
    // на выходе строка в base64: 77u/YW1pcm92c3VyZW5AcmFtYmxlci5ydTpPc3JhbTY3Mg==

     
     HTTPЗапрос.Заголовки.Вставить("Authorization", "Basic "+СтрокаАвторизацииBASE64);
     HTTPЗапрос.Заголовки.Вставить("Accept", "application/json");
     HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
         HTTPЗапрос.Заголовки.Вставить("Host", "xn----7sbgfs5baxh7jc.xn--p1ai/");

         Ответ = HTTPСоединение.Получить(HTTPЗапрос);   

     Сообщить("Код результата: " + Ответ.КодСостояния);     
     
     ОтветJSON = Ответ.ПолучитьТелоКакСтроку("UTF-8");          
     
     Сообщить("Ответ: " + ОтветJSON); 
     
     Сообщить ("текст запроса :" + ТекстЗапроса);
   Garykom
 
7 - 14.08.19 - 15:38
Вот эти "{" и "}" выглядят очень странно, без них попробуй.
А лучше мануала в студию
   Garykom
 
8 - 14.08.19 - 15:41
"Доступ к функциям сервиса ограничен как технически, так финансово и административно. Для получения доступа вам необходимо сообщить следующие данные:

детальную информацию о конкретной компании, которая будет использовать сервис. Имеется ввиду вся юридическая информация.
логин пользователя на сайте, под которым будут осуществляться запросы.
адрес страницы WEB-сайта или имя программы, с которой будут использоваться запросы к функциям сервиса.
IP-адрес, с которого будет осуществляться доступ"

могут блочить по ip
   Timur2019
 
9 - 14.08.19 - 15:43
(8) все разрешено IP пингуется.
   Timur2019
 
10 - 14.08.19 - 15:46
Мануал :

HTTP метод
    
GET

URL запроса
    

http://xn----7sbgfs5baxh7jc.xn--p1ai/SearchService/GetBrands?article={article}&withoutTransit=={true/false}

Заголовки запроса (request headers)
    

Authorization: Basic {credentials}
Accept: application/json
Content-type: application/json
Host: xn----7sbgfs5baxh7jc.xn--p1ai/

Параметры запроса

(Все параметры обязательные!)
    

article – Артикул (тип string)

withoutTransit – Не возвращать транзитных поставщиков (тип Bool)

Ответ
    

Строка JSON, коллекция объектов следующей структуры:

"Article": "333305"
    

Артикул детали
    

String
"Brand": "KYB"
    

Производитель (бренд)
    

String

"Description": "Амортизатор
    

Описание детали
    

String

//---------------------
Важно! домен сайта http://автосоюз-юг.рф/ должен быть написан в punycode: http://xn----7sbgfs5baxh7jc.xn--p1ai/
//----------------------

Запросы осуществляется с помощью HTTP-методов GET

Для запросов требуется преобразовать ваш логин и пароль вида «Login:Password» в формат Base64

В итоге строка авторизации должна иметь вид:

Пример кода на C#:

return "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(Login + ":" +Password));
   Timur2019
 
11 - 14.08.19 - 15:50
   Timur2019
 
12 - 14.08.19 - 15:52
Интересно что так :  
 ТекстЗапроса = "/";    
та же ошибка ... :)
   bootini
 
13 - 14.08.19 - 16:01
(0) В ТекстЗапроса http:.... не надо, оно в соединении указывается.

ТекстЗапроса = "/SearchService/GetBrands?article={article}&withoutTransit=={true/false}"
   bootini
 
14 - 14.08.19 - 16:03
(13) а в место  article должно быть значение, т.е. правильный текст запроса должен выглядеть как-то так:

ТекстЗапроса = "/SearchService/GetBrands?article=01235485&withoutTransit==false"
   Timur2019
 
15 - 14.08.19 - 16:04
(13)
Сейчас так : - тот же результат :)
ТекстЗапроса = "/SearchService/GetBrands?article={1004110004}&withoutTransit={true}";
   bootini
 
16 - 14.08.19 - 16:09
скобки не нужны "/SearchService/GetBrands?article=1004110004}&withoutTransit=true"
   bootini
 
17 - 14.08.19 - 16:09
(16) так: /SearchService/GetBrands?article=1004110004&withoutTransit=true
   Garykom
 
18 - 14.08.19 - 16:09
(15) забыл одну скобку
   Garykom
 
19 - 14.08.19 - 16:10
Короче http это такое веселое там все зависит от опыта кто поднимал и кто пишет коннект.
И качества документации и примеров.
   bootini
 
20 - 14.08.19 - 16:11
(17) работает, я в адресную строку вбил, мне вернуло "Login and Password are wrong"
   Timur2019
 
21 - 14.08.19 - 16:16
(20) да из браузера работает из 1с пока то-же самое.... щас буду посмотреть
   Timur2019
 
22 - 14.08.19 - 16:24
Из 1с :

 Код результата: 400
Ответ: <html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.10.3</center>
</body>
</html>
текст запроса :/SearchService/GetBrands?article=1004110004&withoutTransit=true
   Timur2019
 
23 - 14.08.19 - 16:25
Значит строка запроса правильная - дело в аутентификации поидее
   Garykom
 
24 - 14.08.19 - 16:27
Логин с паролем в какой кодировке перед тем как в Base64 ?

Если дятел сервер делал то там может быть и Windows-1251 и UTF-8 и что угодно
   Garykom
 
25 - 14.08.19 - 16:27
ну или логин/пароль лучше только латиница
   bootini
 
26 - 14.08.19 - 16:29
СтрокаАвторизацииДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(СтрокаАвторизации, КодировкаТекста.UTF8, Ложь);
СтрокаАвторизацииBASE64 = Base64Строка(СтрокаАвторизацииДвоичныеДанные);
   Garykom
 
27 - 14.08.19 - 16:29
(22) "400 Bad Request" это именно плохой запрос проверяй через Postman или через curl
   bootini
 
28 - 14.08.19 - 16:30
(27) и скорее всего с заголовками что-то
   Timur2019
 
29 - 14.08.19 - 16:42
24) В мануале есть такое :

Для запросов требуется преобразовать ваш логин и пароль вида «Login:Password» в формат Base64

В итоге строка авторизации должна иметь вид:

Пример кода на C#:
return "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(Login + ":" +Password));

как я понимаю сначала строку в UTF 8 а потом в Base64...

Да так локоничнее чем было...
СтрокаАвторизацииДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(СтрокаАвторизации, КодировкаТекста.UTF8, Ложь);
СтрокаАвторизацииBASE64 = Base64Строка(СтрокаАвторизацииДвоичныеДанные);
   Timur2019
 
30 - 14.08.19 - 16:42
но пока не взлетел...
 
 Рекламное место пустует
   bootini
 
31 - 14.08.19 - 16:49
Fiddler еще можешь поставить, он перехватывает запрос и ответ, там можно посмотреть где конкретно ошибка
   Timur2019
 
32 - 14.08.19 - 16:52
(31)ок спасибо :)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.