|
Не взлетает http соединение | ☑ | ||
---|---|---|---|---|
0
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} Что я делаю не так ? |
|||
1
Garykom
гуру
14.08.19
✎
14:43
|
1. Если начать читать мануалы то
2. ТекстЗапроса = "/SearchService/GetBrands?article={1004110004}&withoutTransit={true}" |
|||
2
ГдеСобака Зарыта
14.08.19
✎
14:44
|
"Что я делаю не так?" Ты гуглом не пользуешься, обязательно нужно гуглить, прежде чем писать на форум
Обмен между базами через http-сервис - КодСостояния = 403 |
|||
3
Timur2019
14.08.19
✎
14:48
|
Спасибо :)
|
|||
4
Timur2019
14.08.19
✎
15:05
|
Не - тоже самое , сделал так :
HTTPСоединение = Новый HTTPСоединение("xn----7sbgfs5baxh7jc.xnp1ai",80); ТекстЗапроса = "/SearchService/GetBrands?article={1004110004}&withoutTransit=={true}" ; HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса); Та - же ошибка. |
|||
5
Timur2019
14.08.19
✎
15:23
|
up
|
|||
6
Timur2019
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); Сообщить ("текст запроса :" + ТекстЗапроса); |
|||
7
Garykom
гуру
14.08.19
✎
15:38
|
Вот эти "{" и "}" выглядят очень странно, без них попробуй.
А лучше мануала в студию |
|||
8
Garykom
гуру
14.08.19
✎
15:41
|
"Доступ к функциям сервиса ограничен как технически, так финансово и административно. Для получения доступа вам необходимо сообщить следующие данные:
детальную информацию о конкретной компании, которая будет использовать сервис. Имеется ввиду вся юридическая информация. логин пользователя на сайте, под которым будут осуществляться запросы. адрес страницы WEB-сайта или имя программы, с которой будут использоваться запросы к функциям сервиса. IP-адрес, с которого будет осуществляться доступ" могут блочить по ip |
|||
9
Timur2019
14.08.19
✎
15:43
|
(8) все разрешено IP пингуется.
|
|||
10
Timur2019
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)); |
|||
11
Timur2019
14.08.19
✎
15:50
|
(7) "{" "}" есть в документации :
http://xn----7sbgfs5baxh7jc.xn--p1ai/SearchService/GetBrands?article={article}&withoutTransit={true/false} |
|||
12
Timur2019
14.08.19
✎
15:52
|
Интересно что так :
ТекстЗапроса = "/"; та же ошибка ... :) |
|||
13
bootini
14.08.19
✎
16:01
|
(0) В ТекстЗапроса http:.... не надо, оно в соединении указывается.
ТекстЗапроса = "/SearchService/GetBrands?article={article}&withoutTransit=={true/false}" |
|||
14
bootini
14.08.19
✎
16:03
|
(13) а в место article должно быть значение, т.е. правильный текст запроса должен выглядеть как-то так:
ТекстЗапроса = "/SearchService/GetBrands?article=01235485&withoutTransit==false" |
|||
15
Timur2019
14.08.19
✎
16:04
|
(13)
Сейчас так : - тот же результат :) ТекстЗапроса = "/SearchService/GetBrands?article={1004110004}&withoutTransit={true}"; |
|||
16
bootini
14.08.19
✎
16:09
|
скобки не нужны "/SearchService/GetBrands?article=1004110004}&withoutTransit=true"
|
|||
17
bootini
14.08.19
✎
16:09
|
(16) так: /SearchService/GetBrands?article=1004110004&withoutTransit=true
|
|||
18
Garykom
гуру
14.08.19
✎
16:09
|
(15) забыл одну скобку
|
|||
19
Garykom
гуру
14.08.19
✎
16:10
|
Короче http это такое веселое там все зависит от опыта кто поднимал и кто пишет коннект.
И качества документации и примеров. |
|||
20
bootini
14.08.19
✎
16:11
|
(17) работает, я в адресную строку вбил, мне вернуло "Login and Password are wrong"
|
|||
21
Timur2019
14.08.19
✎
16:16
|
(20) да из браузера работает из 1с пока то-же самое.... щас буду посмотреть
|
|||
22
Timur2019
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 |
|||
23
Timur2019
14.08.19
✎
16:25
|
Значит строка запроса правильная - дело в аутентификации поидее
|
|||
24
Garykom
гуру
14.08.19
✎
16:27
|
Логин с паролем в какой кодировке перед тем как в Base64 ?
Если дятел сервер делал то там может быть и Windows-1251 и UTF-8 и что угодно |
|||
25
Garykom
гуру
14.08.19
✎
16:27
|
ну или логин/пароль лучше только латиница
|
|||
26
bootini
14.08.19
✎
16:29
|
СтрокаАвторизацииДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(СтрокаАвторизации, КодировкаТекста.UTF8, Ложь);
СтрокаАвторизацииBASE64 = Base64Строка(СтрокаАвторизацииДвоичныеДанные); |
|||
27
Garykom
гуру
14.08.19
✎
16:29
|
(22) "400 Bad Request" это именно плохой запрос проверяй через Postman или через curl
|
|||
28
bootini
14.08.19
✎
16:30
|
(27) и скорее всего с заголовками что-то
|
|||
29
Timur2019
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Строка(СтрокаАвторизацииДвоичныеДанные); |
|||
30
Timur2019
14.08.19
✎
16:42
|
но пока не взлетел...
|
|||
31
bootini
14.08.19
✎
16:49
|
Fiddler еще можешь поставить, он перехватывает запрос и ответ, там можно посмотреть где конкретно ошибка
|
|||
32
Timur2019
14.08.19
✎
16:52
|
(31)ок спасибо :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |