|
При получении данных с сайта получаю 301 ошибку | ☑ | ||
---|---|---|---|---|
0
asder117
24.11.21
✎
15:45
|
Доброго времени суток. имеем на борту УПП 1.3. Руководство решило делать интеграцию с сайтом откуда получать данные по апи
Постман на такую конструкцию дает json ответ http://www.domain.com/api/v2/fam/?categories=253&language=ru При попытке реализовать это в коде вылетает 301 код как это решить не пойму. Пробовал разными способами все равно 301 код. Спасибо на подсказку |
|||
12
asder117
24.11.21
✎
15:52
|
(10) HTTPЗапрос = Новый HTTPЗапрос("/api/v2/families"); типа такого?
|
|||
13
fisher
24.11.21
✎
15:52
|
(9) Если есть что сказать - не держи в себе.
|
|||
14
asder117
24.11.21
✎
15:54
|
(11) поправил но все равно 301 код location в ответе https://www.domain.com/api/v2/families
|
|||
15
Garykom
гуру
24.11.21
✎
16:02
|
(13) в свое время пришлось эту недолибу допиливать
так что я все сказал |
|||
16
Garykom
гуру
24.11.21
✎
16:02
|
(14) ну так посмотри что в ответе
|
|||
17
Garykom
гуру
24.11.21
✎
16:03
|
и код уже покажи весь
|
|||
18
Garykom
гуру
24.11.21
✎
16:03
|
(17)+ имхо ошибся где то
|
|||
19
eklmn
гуру
24.11.21
✎
16:07
|
(17) так не интересно... телепата развивай!
|
|||
20
fisher
24.11.21
✎
16:08
|
(15) Хотя бы в комментариях на инфостарте тогда отписался о найденных тобой проблемах, раз уж пул реквест было лень делать. Вот таким бы мы тебя любили, вот таким бы мы тебя хвалили.
|
|||
21
Garykom
гуру
24.11.21
✎
16:10
|
(20) нахер
слишком много недолиб разных, в каждой отписываться бесплатно не готов |
|||
22
pechkin
24.11.21
✎
16:10
|
ну так www добавь
|
|||
23
Garykom
гуру
24.11.21
✎
16:11
|
(22) и такой прикол может быть да
криво записи настроили |
|||
24
asder117
24.11.21
✎
16:29
|
(10) Коллега а по моему вопросу что лучше сделать? спасибо
|
|||
25
Ёпрст
24.11.21
✎
17:46
|
(24) польше кода
|
|||
26
Ёпрст
24.11.21
✎
17:46
|
* больше
|
|||
27
asder117
24.11.21
✎
23:02
|
(25) да хоть листинг нишиша не выходит
|
|||
28
Ёпрст
24.11.21
✎
23:30
|
(27) нам отсюда не видно, что ты там творишь
Больше кода. |
|||
29
ДедМорроз
25.11.21
✎
09:40
|
Если в редиректе передан url отличный от запрашиваемого,то идем по нему,отдельно,желательно,все пройденные класть в массив,чтобы при циклических редиректах не было проблем или ограничивать их применение каким-то количеством,как делает браузер.
Что сложного ? |
|||
30
eklmn
гуру
25.11.21
✎
09:44
|
(29) "Что сложного ?" - понимание...
|
|||
31
ДедМорроз
25.11.21
✎
09:56
|
Если нет понимания,то знакомство с библиотекой еще более деструктивно пройдет.
|
|||
32
asder117
25.11.21
✎
10:31
|
(26) ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = Ложь; ЗаписьJSON.УстановитьСтроку(); СтруктураЗапроса = Новый Структура; СтруктураЗапроса.Вставить("categories__id","253"); СтруктураЗапроса.Вставить("language","ru"); ЗаписатьJSON(ЗаписьJSON,СтруктураЗапроса); СтрокаJSON = ЗаписьJSON.Закрыть(); HTTPСоединение = Новый HTTPСоединение(URL,443, , , , , Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос("/api/v2/families"); HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json"); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); Сообщить(""+HTTPОтвет.КодСостояния+" "+HTTPОтвет.ПолучитьТелоКакСтроку()); Если HTTPОтвет.КодСостояния = 301 тогда НовыйАдрес = HTTPОтвет.Заголовки.Получить("Location"); ПолучитьДанныеСветовыНаСервере(Лев(НовыйАдрес,25)); КонецЕсли; ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку()); Структура = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); URL в начале приходит "domain.com" |
|||
33
asder117
25.11.21
✎
10:34
|
(32) при этом постман http://www.domain.com/api/v2/families/?categories__id=253&language=ru отрабатывает как надо
|
|||
34
asder117
25.11.21
✎
10:35
|
(33) "domain.com" это не реальное имя сайта..свой ресурс
|
|||
35
Garykom
гуру
25.11.21
✎
10:48
|
(32) >HTTPСоединение = Новый HTTPСоединение(URL,443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
убери порт 443 писал же тебе |
|||
36
Garykom
гуру
25.11.21
✎
10:48
|
(35) просто
HTTPСоединение = Новый HTTPСоединение(URL, , , , , , Новый ЗащищенноеСоединениеOpenSSL); |
|||
37
Garykom
гуру
25.11.21
✎
10:49
|
SSL/TLS которое HTTPS (обычно по умолчанию 443 порт) может быть на любом порту даже на обычном 80 где обычно просто HTTP
|
|||
38
Garykom
гуру
25.11.21
✎
10:55
|
(33) и да
>при этом постман http://www.domain.com/api/v2/families/?categories__id=253&language=ru отрабатывает как надо это у тебя GET или POST? "?categories__id=253&language=ru" - это json в теле или параметры в url? |
|||
39
Garykom
гуру
25.11.21
✎
10:56
|
Короче или попроси рабочий пример под 1С
Или разберись уже сам со всеми технологиями чтобы в них не путаться Или найми спеца за денежку |
|||
40
fisher
25.11.21
✎
10:57
|
(33) В подобных случаях (постман отрабатывает как надо) ставишь fiddler и играешь в "найди 20 отличий".
|
|||
41
fisher
25.11.21
✎
11:01
|
Хотя если там в самом деле редирект, то вероятно постман его разруливает. Можно попробовать посмотреть в инструментах отладки браузера.
|
|||
42
Ёпрст
25.11.21
✎
11:46
|
(33) ну и где ты ?categories__id=253&language=ru задал ?
Правильно, нигде |
|||
43
Ёпрст
25.11.21
✎
11:47
|
после получения редиректа, ты должен вот сюда запихать:
HTTPЗапрос = Новый HTTPЗапрос("/api/v2/families?categories__id=253&language=ru"); фирштейн ? |
|||
44
Ёпрст
25.11.21
✎
11:48
|
ну там, синтаксис со слешами поправь тока..
|
|||
45
eklmn
гуру
25.11.21
✎
13:19
|
"ПолучитьДанныеСветовыНаСервере"
интересно что там происходит.... |
|||
46
fisher
25.11.21
✎
13:22
|
(45) Очевидно, вызываются всякие "ВопросСветовомуМужуНаСервере()"
|
|||
47
Ryzeman
25.11.21
✎
13:26
|
(32) У тебя тут POST-запрос (33) А тут GET. Причём в первом случае ты вставляешь JSON в тело, а во втором (через браузер, очевидно) - пишешь свои отборы в параметры запроса...
|
|||
48
Ryzeman
25.11.21
✎
13:28
|
(32) не обязательно код через сообщения выводить. Можно ставить точку останова и во время отладки просмотреть целиком и твой запрос и ответ. Увидишь заодно что там в теле, что в заголовках...
|
|||
49
Ryzeman
25.11.21
✎
13:29
|
(33) http или https? У тебя не указан порт, по идее тогда должен на 80-ый ломиться и это не защищённое соединение...
|
|||
50
asder117
25.11.21
✎
13:57
|
(38) get
|
|||
51
asder117
25.11.21
✎
13:58
|
(38) ""?categories__id=253&language=ru" - это json в теле или параметры в url?" - параметры в url
|
|||
52
asder117
25.11.21
✎
13:59
|
(48) Я так и делаю
|
|||
53
asder117
25.11.21
✎
13:59
|
(49) постман через http
|
|||
54
Ёпрст
25.11.21
✎
14:13
|
(51) где это в коде у тебя ?
|
|||
55
asder117
25.11.21
✎
14:18
|
(54) в теле
СтруктураЗапроса = Новый Структура; СтруктураЗапроса.Вставить("categories__id","253"); СтруктураЗапроса.Вставить("language","ru"); ЗаписатьJSON(ЗаписьJSON,СтруктураЗапроса); |
|||
56
Kassern
25.11.21
✎
14:21
|
(55) попробуйте вытащить это дело из тела и впихнуть в урл. У вас ГЕТ или ПОСТ запрос? Скорее всего ГЕТ, попробуйте явно вызвать без тела, просто строчку урл явно через Ответ=Соединение.ВызватьМетод("GET",Запрос);
|
|||
57
Garykom
гуру
25.11.21
✎
14:22
|
(50) а вот
HTTPСоединение.ОтправитьДляОбработки это POST |
|||
58
Kassern
25.11.21
✎
14:23
|
(57) мало того, что юзает метод ПОСТ, так еще и в теле параметры передает для ГЕТ...
|
|||
59
Ryzeman
25.11.21
✎
14:26
|
HTTPСоединение = Новый HTTPСоединение(www.domain.com);
HTTPЗапрос = Новый HTTPЗапрос("/api/v2/families/?categories__id=253&language=ru"); HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); Проверяй, потом сам раскидаешь как надо. |
|||
60
Ryzeman
25.11.21
✎
14:27
|
(59)+ URL в кавычках, разумеется
|
|||
61
Kassern
25.11.21
✎
14:28
|
(59) и ssl в соединении, если это https
|
|||
62
Ryzeman
25.11.21
✎
14:29
|
(61) он вроде писал что в постмане он по HTTP стучался и там всё ок
|
|||
63
Kassern
25.11.21
✎
14:36
|
(60) еще может надо без www писать, просто "domain.com"
|
|||
64
Garykom
гуру
25.11.21
✎
14:41
|
(58) любой запрос в т.ч. GET имеет тело
и туда можно засунуть параметры (хотя логичней в заголовки)\ другой вопрос что не любой софт может засунуть и не любой понять-вытащить засунутые 1С может кстати |
|||
65
asder117
25.11.21
✎
14:41
|
(59) кодСостояния 301
|
|||
66
Ryzeman
25.11.21
✎
14:42
|
(65) так а в заголовках что? Location что пишет?
|
|||
67
Garykom
гуру
25.11.21
✎
14:42
|
(65) покажи уже тело ответа при этом 301
и все заголовки |
|||
68
Kassern
25.11.21
✎
14:42
|
(64) в большинстве своем для гет запросов тело не нужно. Все передается в заголовках
|
|||
69
Garykom
гуру
25.11.21
✎
14:43
|
(68) это просто так общепринято
не значит что нельзя |
|||
70
Kassern
25.11.21
✎
14:45
|
(65) пробовали без www?
|
|||
71
asder117
25.11.21
✎
14:45
|
(70) да
|
|||
72
Garykom
гуру
25.11.21
✎
14:46
|
http по сути сделан по аналогии с html
title header body ну и добавили сверху методы, причем только "В версии HTTP 0.9 использовался только метод GET" Метод HTTP (англ. HTTP Method) — последовательность из любых символов, кроме управляющих и разделителей, указывающая на основную операцию над ресурсом. Обычно метод представляет собой короткое английское слово, записанное заглавными буквами. Обратите внимание, что название метода чувствительно к регистру. Сервер может использовать любые методы, не существует обязательных методов для сервера или клиента. Если сервер не распознал указанный клиентом метод, то он должен вернуть статус 501 (Not Implemented). Если серверу метод известен, но он неприменим к конкретному ресурсу, то возвращается сообщение с кодом 405 (Method Not Allowed). В обоих случаях серверу следует включить в сообщение ответа заголовок Allow со списком поддерживаемых методов. Кроме методов GET и HEAD, часто применяется метод POST. |
|||
73
asder117
25.11.21
✎
14:48
|
(67) <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">¶<html><head>¶<title>301 Moved Permanently</title>¶</head><body>¶<h1>Moved Permanently</h1>¶<p>The document has moved <a href="https://www.domain.com/api/v2/families/?categories__id=253&language=ru">here</a>.</p>¶</body></html>¶
|
|||
74
Kassern
25.11.21
✎
14:48
|
(62) ну да, а вот тут (73) https://www.domain.com
|
|||
75
asder117
25.11.21
✎
14:49
|
(66) "https://www.domain.com/api/v2/families/?categories__id=253&language=ru" это в location
|
|||
76
Garykom
гуру
25.11.21
✎
14:51
|
(73) сделай уже
|
|||
77
Garykom
гуру
25.11.21
✎
14:52
|
(76) еще можно попробовать принудительно https на 80 порту
HTTPСоединение = Новый HTTPСоединение(URL, 80, , , , , Новый ЗащищенноеСоединениеOpenSSL); |
|||
78
Ryzeman
25.11.21
✎
14:52
|
(75) теперь меняй первую строчку на защищённое соединение как написано в (76) :)
|
|||
79
asder117
25.11.21
✎
14:53
|
(74) HTTPСоединение = Новый HTTPСоединение("ltcompany.com");
HTTPЗапрос = Новый HTTPЗапрос("/api/v2/families/?categories__id=253&language=ru"); HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); Если HTTPОтвет.КодСостояния = 301 Тогда НовыйАдрес = HTTPОтвет.Заголовки.Получить("Location"); НовыйАдрес1 = (Лев(НовыйАдрес,25)); HTTPСоединение = Новый HTTPСоединение(НовыйАдрес1,,,,,,Новый ЗащищенноеСоединениеOpenSSL()); HTTPЗапрос = Новый HTTPЗапрос("/api/v2/families/?categories__id=253&language=ru"); HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); а=0; КонецЕсли; а=0; Так сделал и ничего |
|||
80
asder117
25.11.21
✎
14:54
|
(76) 500 <html>
<head> <title>Internal Server Error</title> </head> <body> <h1><p>Internal Server Error</p></h1> </body> </html> теперь новенькое |
|||
81
Garykom
гуру
25.11.21
✎
14:54
|
"categories__id" точно с двумя "_"
|
|||
82
Garykom
гуру
25.11.21
✎
14:55
|
(81)+ ?
|
|||
83
asder117
25.11.21
✎
14:56
|
(81) да
|
|||
84
Garykom
гуру
25.11.21
✎
14:56
|
(79) >НовыйАдрес1 = (Лев(НовыйАдрес,25));
ты понимаешь что это пипец? потому что "https://www.domain.com/api/v2/families/?categories__id=253&language=ru" это в location и там будет левое "https://" |
|||
85
asder117
25.11.21
✎
14:58
|
(84) в смысле левое?
|
|||
86
Kassern
25.11.21
✎
14:58
|
такая же ошибка... https://yadi.sk/i/soFtvrKpyKRKyg
|
|||
87
asder117
25.11.21
✎
14:58
|
(77) вообще завис
|
|||
88
asder117
25.11.21
✎
14:59
|
(86) а через постман все норм
|
|||
89
Kassern
25.11.21
✎
14:59
|
(88) скрин постмана с настройками скиньте
|
|||
90
Garykom
гуру
25.11.21
✎
15:00
|
(85) HTTPСоединение = Новый HTTPСоединение("ltcompany.com"); // правильно
а вот HTTPСоединение = Новый HTTPСоединение("https://www.ltcompany.com"); // не правильно для 1С 1С сама добавляет http или https в зависимости есть или нет ,Новый ЗащищенноеСоединениеOpenSSL() |
|||
91
Kassern
25.11.21
✎
15:03
|
тот кто писал апишку для сайта, уточните у него следующие вопросы:
1) защищенное ли соединение 2) какой порт 3) какой метод получения данных 4) какие заголовки нужны для запроса (тот же content type, в том числе и аунтификация) 5) работает на внешку, или только во внутреннем контуре 6) какие параметры обязательны для конкретного запроса и где их указывать (в урл, или в теле) |
|||
92
asder117
25.11.21
✎
15:03
|
||||
93
asder117
25.11.21
✎
15:04
|
(91) попробуем
|
|||
94
Kassern
25.11.21
✎
15:05
|
(92) у меня с этого сайта не работают скрины. Можете через https://ru.imgbb.com/ закинуть ссылку или через яндекс/гугл диск ссылку
|
|||
95
Garykom
гуру
25.11.21
✎
15:11
|
(92) еще не только Params а еще Headers покажи
|
|||
96
Garykom
гуру
25.11.21
✎
15:11
|
(95) там 6 чего то
|
|||
97
Garykom
гуру
25.11.21
✎
15:14
|
(80) вероятно чего то не хватает
т.е. код (76) правильный но надо дозаполнить Заголовки |
|||
98
asder117
25.11.21
✎
16:45
|
||||
99
asder117
25.11.21
✎
16:46
|
(96) пустые поля
|
|||
100
asder117
25.11.21
✎
16:54
|
||||
101
Kassern
25.11.21
✎
17:25
|
(100) если вы зайдете на вкладку настроек в постмане и отключите опцию Automatically follow redirects то получите точно такую же ошибку, как в 1с
|
|||
102
Kassern
25.11.21
✎
17:34
|
скорее всего у вас https соединение. При попытке незащищенного соединения http вас редиректит на https ссылку. А вот ее вы не можете открыть, потому что настройки безопасности сайта не дают доступа к данному ресурсу. А для сервера постпана скорее всего сделано исключение.
|
|||
103
Kassern
25.11.21
✎
17:35
|
по идее у вас это обычный гет запрос без какой либо аунтификации. Видимо защиту апи сделали на уровне ssl сертификатов
|
|||
104
Garykom
гуру
25.11.21
✎
17:44
|
(98) не пустые а "6 hidden"
тыкни на глазок |
|||
105
Kassern
25.11.21
✎
18:03
|
попытался через постман вашу строчку запроса повторить, мне пустой ответ приходит со статусом 200.
|
|||
106
asder117
25.11.21
✎
22:29
|
(101) ага в точку
|
|||
107
asder117
26.11.21
✎
08:44
|
(104) Request Headers
User-Agent: PostmanRuntime/7.28.4 Accept: */* Postman-Token: aedfbd3c-ca3c-4294-92e3-3f3da7ab9a3b Accept-Encoding: gzip, deflate, br Connection: keep-alive Referer: http://www.ltcompany.com/api/v2/families/?middle_categories__id=253&language=ru Host: www.ltcompany.com Response Headers Date: Thu, 25 Nov 2021 19:50:55 GMT Server: gunicorn/19.8.1 Content-Type: application/json Vary: Accept-Encoding,Accept,Accept-Language,Cookie X-Frame-Options: SAMEORIGIN Content-Language: ru Allow: GET, POST, HEAD, OPTIONS Content-Encoding: gzip Via: 1.1 www.ltcompany.com Connection: close Transfer-Encoding: chunked Response Body Это в консоли вываливает URL = "ltcompany.com"; ЗаголовокЗапросаHTTP = Новый Соответствие(); ЗаголовокЗапросаHTTP.Вставить("Content-Type: ", "application/json-rpc"); ЗаголовокЗапросаHTTP.Вставить("Connection", "keep-alive"); ЗаголовокЗапросаHTTP.Вставить("Host", "www.ltcompany.com"); HTTPСоединение = Новый HTTPСоединение(URL,, , , , , Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос("/api/v2/families/?categories__id=253&language=ru"); HTTPЗапрос.Заголовки.Вставить("Content-Type: ", "application/json"); HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive"); //HTTPЗапрос.Заголовки.Вставить("Host", "ltcompany.com"); HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); Сообщить(""+HTTPОтвет.КодСостояния+" "+HTTPОтвет.ПолучитьТелоКакСтроку()); а=0; Пробовал так код 301 если строку HTTPЗапрос.Заголовки.Вставить("Host", "ltcompany.com"); открыть то 500 ошибка |
|||
108
Garykom
гуру
26.11.21
✎
09:24
|
думаю ничего у тебя не получится
потому что пока сам не понимаешь еще что к чему и валишь все в одну кучу |
|||
109
asder117
26.11.21
✎
10:12
|
(108) Запросил описание api. буду его крутить и вникать
|
|||
110
eklmn
гуру
26.11.21
✎
11:53
|
(109) рано запросил, пиши ещё!
|
|||
111
asder117
26.11.21
✎
15:08
|
(110) блин думал сам допинаю))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |