Вход | Регистрация
    1  2   

При получении данных с сайта получаю 301 ошибку

При получении  данных с сайта получаю 301 ошибку
Я
   asder117
 
24.11.21 - 15:45
Доброго времени суток. имеем на борту УПП 1.3. Руководство решило делать интеграцию с сайтом откуда получать данные по апи
Постман на такую конструкцию дает json ответ http://www.domain.com/api/v2/fam/?categories=253&language=ru
При попытке реализовать это в коде вылетает 301 код как это решить не пойму. Пробовал разными способами все равно 301 код.
Спасибо на подсказку
   Garykom
 
1 - 24.11.21 - 15:45
это не ошибка
это редирект https://developer.mozilla.org/ru/docs/Web/HTTP/Status/301
   ДенисЧ
 
2 - 24.11.21 - 15:46
301 это редирект. Тебе нужно прочитать ответ, взять оттуда урл и пойти по нему.
   Garykom
 
3 - 24.11.21 - 15:46
(2) не обязательно
обычно достаточно сделать httpS вместо просто http
   ДенисЧ
 
4 - 24.11.21 - 15:47
(3) Так в урле ответа и будет хтппс.
   asder117
 
5 - 24.11.21 - 15:47
(3) HTTPСоединение = Новый HTTPСоединение("domain.com/api",443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
так соединение даю
   Garykom
 
6 - 24.11.21 - 15:48
(5) "domain.com/api" - ошибка
   fisher
 
7 - 24.11.21 - 15:48
https://github.com/vbondarevsky/Connector
В том числе - автоматическое разрешение редиректов.
   asder117
 
8 - 24.11.21 - 15:49
   Garykom
 
9 - 24.11.21 - 15:49
(7) сначала загляни и посмотри все ли оно коды/статусы http обрабатывает
   Garykom
 
10 - 24.11.21 - 15:50
(8) у тебя ошибка
HTTPСоединение = Новый HTTPСоединение("domain.com",, , , , , Новый ЗащищенноеСоединениеOpenSSL);
а вот запрос уже "/api"
   asder117
 
11 - 24.11.21 - 15:51
(10) Спасибо поправлю отпишусь
   asder117
 
12 - 24.11.21 - 15:52
(10)   HTTPЗапрос = Новый HTTPЗапрос("/api/v2/families"); типа такого?
   fisher
 
13 - 24.11.21 - 15:52
(9) Если есть что сказать - не держи в себе.
   asder117
 
14 - 24.11.21 - 15:54
(11) поправил но все равно 301 код location в ответе https://www.domain.com/api/v2/families
   Garykom
 
15 - 24.11.21 - 16:02
(13) в свое время пришлось эту недолибу допиливать
так что я все сказал
   Garykom
 
16 - 24.11.21 - 16:02
(14) ну так посмотри что в ответе
   Garykom
 
17 - 24.11.21 - 16:03
и код уже покажи весь
   Garykom
 
18 - 24.11.21 - 16:03
(17)+ имхо ошибся где то
   eklmn
 
19 - 24.11.21 - 16:07
(17) так не интересно... телепата развивай!
   fisher
 
20 - 24.11.21 - 16:08
(15) Хотя бы в комментариях на инфостарте тогда отписался о найденных тобой проблемах, раз уж пул реквест было лень делать. Вот таким бы мы тебя любили, вот таким бы мы тебя хвалили.
   Garykom
 
21 - 24.11.21 - 16:10
(20) нахер
слишком много недолиб разных, в каждой отписываться бесплатно не готов
   pechkin
 
22 - 24.11.21 - 16:10
ну так www добавь
   Garykom
 
23 - 24.11.21 - 16:11
(22) и такой прикол может быть да
криво записи настроили
   asder117
 
24 - 24.11.21 - 16:29
(10) Коллега а по моему вопросу что лучше сделать? спасибо
   Ёпрст
 
25 - 24.11.21 - 17:46
(24) польше кода
   Ёпрст
 
26 - 24.11.21 - 17:46
* больше
   asder117
 
27 - 24.11.21 - 23:02
(25) да хоть листинг нишиша не выходит
   Ёпрст
 
28 - 24.11.21 - 23:30
(27) нам отсюда не видно, что ты там творишь
Больше кода.
   ДедМорроз
 
29 - 25.11.21 - 09:40
Если в редиректе передан url отличный от запрашиваемого,то идем по нему,отдельно,желательно,все пройденные класть в массив,чтобы при циклических редиректах не было проблем или ограничивать их применение каким-то количеством,как делает браузер.

Что сложного ?
   eklmn
 
30 - 25.11.21 - 09:44
(29) "Что сложного ?" - понимание...
 
 
   ДедМорроз
 
31 - 25.11.21 - 09:56
Если нет понимания,то знакомство с библиотекой еще более деструктивно пройдет.
   asder117
 
32 - 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"
   asder117
 
33 - 25.11.21 - 10:34
(32) при этом постман http://www.domain.com/api/v2/families/?categories__id=253&language=ru отрабатывает как надо
   asder117
 
34 - 25.11.21 - 10:35
(33) "domain.com" это не реальное имя сайта..свой ресурс
   Garykom
 
35 - 25.11.21 - 10:48
(32) >HTTPСоединение = Новый HTTPСоединение(URL,443, , , , , Новый ЗащищенноеСоединениеOpenSSL);

убери порт 443
писал же тебе
   Garykom
 
36 - 25.11.21 - 10:48
(35) просто
HTTPСоединение = Новый HTTPСоединение(URL, , , , , , Новый ЗащищенноеСоединениеOpenSSL);
   Garykom
 
37 - 25.11.21 - 10:49
SSL/TLS которое HTTPS (обычно по умолчанию 443 порт) может быть на любом порту даже на обычном 80 где обычно просто HTTP
   Garykom
 
38 - 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?
   Garykom
 
39 - 25.11.21 - 10:56
Короче или попроси рабочий пример под 1С
Или разберись уже сам со всеми технологиями чтобы в них не путаться
Или найми спеца за денежку
   fisher
 
40 - 25.11.21 - 10:57
(33) В подобных случаях (постман отрабатывает как надо) ставишь fiddler и играешь в "найди 20 отличий".
   fisher
 
41 - 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
ну там, синтаксис со слешами поправь тока..
   eklmn
 
45 - 25.11.21 - 13:19
"ПолучитьДанныеСветовыНаСервере"
интересно что там происходит....
   fisher
 
46 - 25.11.21 - 13:22
(45) Очевидно, вызываются всякие "ВопросСветовомуМужуНаСервере()"
   Ryzeman
 
47 - 25.11.21 - 13:26
(32) У тебя тут POST-запрос (33) А тут GET. Причём в первом случае ты вставляешь JSON в тело, а во втором (через браузер, очевидно) - пишешь свои отборы в параметры запроса...
   Ryzeman
 
48 - 25.11.21 - 13:28
(32) не обязательно код через сообщения выводить. Можно ставить точку останова и во время отладки просмотреть целиком и твой запрос и ответ. Увидишь заодно что там в теле, что в заголовках...
   Ryzeman
 
49 - 25.11.21 - 13:29
(33) http или https? У тебя не указан порт, по идее тогда должен на 80-ый ломиться и это не защищённое соединение...
   asder117
 
50 - 25.11.21 - 13:57
(38) get
   asder117
 
51 - 25.11.21 - 13:58
(38) ""?categories__id=253&language=ru" - это json в теле или параметры в url?" - параметры в url
   asder117
 
52 - 25.11.21 - 13:59
(48) Я так и делаю
   asder117
 
53 - 25.11.21 - 13:59
(49) постман через http
   Ёпрст
 
54 - 25.11.21 - 14:13
(51) где это в коде у тебя ?
   asder117
 
55 - 25.11.21 - 14:18
(54) в теле
 СтруктураЗапроса = Новый Структура;
    СтруктураЗапроса.Вставить("categories__id","253");
    СтруктураЗапроса.Вставить("language","ru");
    
    ЗаписатьJSON(ЗаписьJSON,СтруктураЗапроса);
   Kassern
 
56 - 25.11.21 - 14:21
(55) попробуйте вытащить это дело из тела и впихнуть в урл. У вас ГЕТ или ПОСТ запрос? Скорее всего ГЕТ, попробуйте явно вызвать без тела, просто строчку урл явно через Ответ=Соединение.ВызватьМетод("GET",Запрос);
   Garykom
 
57 - 25.11.21 - 14:22
(50) а вот
HTTPСоединение.ОтправитьДляОбработки
это POST
   Kassern
 
58 - 25.11.21 - 14:23
(57) мало того, что юзает метод ПОСТ, так еще и в теле параметры передает для ГЕТ...
   Ryzeman
 
59 - 25.11.21 - 14:26
HTTPСоединение = Новый HTTPСоединение(www.domain.com);
HTTPЗапрос = Новый HTTPЗапрос("/api/v2/families/?categories__id=253&language=ru");
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);

Проверяй, потом сам раскидаешь как надо.
   Ryzeman
 
60 - 25.11.21 - 14:27
(59)+ URL в кавычках, разумеется
 
 
   Kassern
 
61 - 25.11.21 - 14:28
(59) и ssl в соединении, если это https
   Ryzeman
 
62 - 25.11.21 - 14:29
(61) он вроде писал что в постмане он по HTTP стучался и там всё ок
   Kassern
 
63 - 25.11.21 - 14:36
(60) еще может надо без www писать, просто "domain.com"
   Garykom
 
64 - 25.11.21 - 14:41
(58) любой запрос в т.ч. GET имеет тело
и туда можно засунуть параметры (хотя логичней в заголовки)\
другой вопрос что не любой софт может засунуть и не любой понять-вытащить засунутые
1С может кстати
   asder117
 
65 - 25.11.21 - 14:41
(59) кодСостояния 301
   Ryzeman
 
66 - 25.11.21 - 14:42
(65) так а в заголовках что? Location что пишет?
   Garykom
 
67 - 25.11.21 - 14:42
(65) покажи уже тело ответа при этом 301
и все заголовки
   Kassern
 
68 - 25.11.21 - 14:42
(64) в большинстве своем для гет запросов тело не нужно. Все передается в заголовках
   Garykom
 
69 - 25.11.21 - 14:43
(68) это просто так общепринято
не значит что нельзя
   Kassern
 
70 - 25.11.21 - 14:45
(65) пробовали без www?
   asder117
 
71 - 25.11.21 - 14:45
(70) да
   Garykom
 
72 - 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.
   asder117
 
73 - 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>¶
   Kassern
 
74 - 25.11.21 - 14:48
(62) ну да, а вот тут (73) https://www.domain.com
   asder117
 
75 - 25.11.21 - 14:49
   Garykom
 
76 - 25.11.21 - 14:51
(73) сделай уже

URL = "www.domain.com";
HTTPСоединение = Новый HTTPСоединение(URL, , , , , , Новый ЗащищенноеСоединениеOpenSSL);
HTTPЗапрос = Новый HTTPЗапрос("/api/v2/families/?categories__id=253&language=ru");
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Сообщить(""+HTTPОтвет.КодСостояния+" "+HTTPОтвет.ПолучитьТелоКакСтроку());

   Garykom
 
77 - 25.11.21 - 14:52
(76) еще можно попробовать принудительно https на 80 порту
HTTPСоединение = Новый HTTPСоединение(URL, 80, , , , , Новый ЗащищенноеСоединениеOpenSSL);
   Ryzeman
 
78 - 25.11.21 - 14:52
(75) теперь меняй первую строчку на защищённое соединение как написано в (76)  :)
   asder117
 
79 - 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;
Так сделал и ничего
   asder117
 
80 - 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>
теперь новенькое
   Garykom
 
81 - 25.11.21 - 14:54
"categories__id" точно с двумя "_"
   Garykom
 
82 - 25.11.21 - 14:55
(81)+ ?
   asder117
 
83 - 25.11.21 - 14:56
(81) да
   Garykom
 
84 - 25.11.21 - 14:56
(79) >НовыйАдрес1 = (Лев(НовыйАдрес,25));


ты понимаешь что это пипец?
потому что "https://www.domain.com/api/v2/families/?categories__id=253&language=ru" это в location
и там будет левое "https://"
   asder117
 
85 - 25.11.21 - 14:58
(84) в смысле левое?
   Kassern
 
86 - 25.11.21 - 14:58
такая же ошибка... https://yadi.sk/i/soFtvrKpyKRKyg
   asder117
 
87 - 25.11.21 - 14:58
(77) вообще завис
   asder117
 
88 - 25.11.21 - 14:59
(86) а через постман все норм
   Kassern
 
89 - 25.11.21 - 14:59
(88) скрин постмана с настройками скиньте
   Garykom
 
90 - 25.11.21 - 15:00
(85) HTTPСоединение = Новый HTTPСоединение("ltcompany.com");// правильно


а вот
HTTPСоединение = Новый HTTPСоединение("https://www.ltcompany.com"); // не правильно для 1С

1С сама добавляет http или https в зависимости есть или нет ,Новый ЗащищенноеСоединениеOpenSSL()
   Kassern
 
91 - 25.11.21 - 15:03
тот кто писал апишку для сайта, уточните у него следующие вопросы:
1) защищенное ли соединение
2) какой порт
3) какой метод получения данных
4) какие заголовки нужны для запроса (тот же content type, в том числе и аунтификация)
5) работает на внешку, или только во внутреннем контуре
6) какие параметры обязательны для конкретного запроса и где их указывать (в урл, или в теле)
   asder117
 
92 - 25.11.21 - 15:03
   asder117
 
93 - 25.11.21 - 15:04
(91) попробуем
   Kassern
 
94 - 25.11.21 - 15:05
(92) у меня с этого сайта не работают скрины. Можете через https://ru.imgbb.com/ закинуть ссылку или через яндекс/гугл диск ссылку
   Garykom
 
95 - 25.11.21 - 15:11
(92) еще не только Params а еще Headers покажи
   Garykom
 
96 - 25.11.21 - 15:11
(95) там 6 чего то
   Garykom
 
97 - 25.11.21 - 15:14
(80) вероятно чего то не хватает

т.е. код (76) правильный но надо дозаполнить Заголовки
   asder117
 
98 - 25.11.21 - 16:45
   asder117
 
99 - 25.11.21 - 16:46
(96) пустые поля
   asder117
 
100 - 25.11.21 - 16:54
  1  2   

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