Получение данных по API

1. Азверин 3 16.12.22 17:01 Сейчас в теме
Помогите с get запросом к API транспортной компании. Первый опыт.

Пишу так и получаю
Соединение = Новый HTTPСоединение(ОсновнойАдрес,443,Логин,Пароль,,,Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");

Запрос = Новый HTTPЗапрос("/getstatus", Заголовки);
Запрос.УстановитьТелоИзСтроки("key="+КлючAPI);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());

Данные = ПрочитатьJSON(ЧтениеJSON, Ложь)
Показать


Данные содержит структуру, где есть элемент "status" со значением 404.
Я так понимаю, мне нужно получить status = 200.
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
5. spacecraft 16.12.22 18:04 Сейчас в теме +0.5 $m
(1) на сайте есть возможность получить строку выполнения curl. Там можно подсмотреть, что и как должно передаваться
Вот пример той строки:
curl -X GET "https://api.e-bulky.ru/apiv2/getstatus?key=1" -H "accept: application/json"

Соответственно адрес ресурса совсем другой и видно, как передавать параметры.

Ну и пример решения:
Соединение = Новый HTTPСоединение("api.e-bulky.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("accept", "application/json");

Запрос = Новый HTTPЗапрос("/apiv2/getstatus?key="+КлючAPI, Заголовки);

Ответ = Соединение.Получить(Запрос);
Азверин; Pavel Rodinchenko; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. spacecraft 16.12.22 18:04 Сейчас в теме +0.5 $m
(1) на сайте есть возможность получить строку выполнения curl. Там можно подсмотреть, что и как должно передаваться
Вот пример той строки:
curl -X GET "https://api.e-bulky.ru/apiv2/getstatus?key=1" -H "accept: application/json"

Соответственно адрес ресурса совсем другой и видно, как передавать параметры.

Ну и пример решения:
Соединение = Новый HTTPСоединение("api.e-bulky.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("accept", "application/json");

Запрос = Новый HTTPЗапрос("/apiv2/getstatus?key="+КлючAPI, Заголовки);

Ответ = Соединение.Получить(Запрос);
Азверин; Pavel Rodinchenko; +2 Ответить
6. koln 17.12.22 19:32 Сейчас в теме
(1)
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Таким образом Вы отправляете POST запрос
Азверин; +1 Ответить
2. anton13m 2 16.12.22 17:13 Сейчас в теме
В ответе описания ошибки нет? На сайте с указанным ключом тоже ошибка?
3. volex 16.12.22 17:43 Сейчас в теме
Попробуй
Запрос.УстановитьТелоИзСтроки("key="+КлючAPI, "CESU-8");
4. antz 16.12.22 17:44 Сейчас в теме
А так?

Запрос = Новый HTTPЗапрос("/getstatus?key="+КлючAPI, Заголовки);


Устанавливать тело не надо, это GET-запрос. И GET-запросы надо получать:

Ответ = Соединение.Получить(Запрос);
7. annainf 12.06.24 23:53 Сейчас в теме
Здравствуйте, благодарю за пример. С get запросом разобралась, а могли бы пример post запроса показать, пожалуйста?
8. Азверин 3 13.06.24 09:40 Сейчас в теме
(7) Попробую сегодня вечером скинуть.
9. Азверин 3 14.06.24 08:36 Сейчас в теме
(7)
//POST /confirmorder
Функция ОтправитьПодтверждениеЗаказа()
	
	Результат = Новый Структура("Success, order_id, Confirmed", Ложь, "", "");

	Ресурс  = "/apiv2/confirmorder"; //POST
	
	ТелоЗапроса = Ресурс+"?key="+КлючAPI+"&inner_n="+СокрЛП(ЗаявкаНаТС.Номер);	
	
	Соединение = Новый HTTPСоединение("api.e-bulky.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL);
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("accept", "application/json");
	Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); 

	ИмяФайлаРезультата = ПолучитьИмяВременногоФайла();

	Попытка
		HTTPЗапрос = Новый HTTPЗапрос(ТелоЗапроса, Заголовки);
		Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос,ИмяФайлаРезультата);	
		КодСостояния = Ответ.КодСостояния;
		Если КодСостояния <> 200 Тогда
			
		КонецЕсли;	
	Исключение
		Результат.Вставить("ТекстОшибки", "Не удалось получить данные с '"+Ресурс+"':"+Символы.ПС+ОписаниеОшибки());
		Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
	КонецПопытки; 
	
	Попытка
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.ОткрытьФайл(ИмяФайлаРезультата);
		
		Ответ = ПрочитатьJSON(ЧтениеJSON, Ложь);
		
		Если ТипЗнч(Ответ) = Тип("Структура") И Ответ.Свойство("status") И Ответ.status = "200" Тогда
	    	Результат.Вставить("order_id", Ответ.response.order_id);
			Результат.Вставить("Confirmed", Ответ.response.Confirmed); 
			
			ShipmentNumber = Результат.order_id; 
			ДанныеРезультата = ЗапросСтатусаЗаявки(ShipmentNumber);
			ЗаписатьСтатусЗаявкиНаДоставкуТК(ЗаявкаНаТС, ДанныеРезультата.response, Ложь);
		Иначе	
			ВызватьИсключение Ответ.response.Error;	
		КонецЕсли;
		
	Исключение	
		Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);		
	КонецПопытки;
	
	Возврат Результат;
	
КонецФункции
Показать
11. annainf 15.06.24 15:20 Сейчас в теме
(9)Спасибо большое. Принцип поняла.
А если в таком запросе:
https://openapi.wb.ru/promotion/api/ru/#tag/Statistika/paths/~1adv~1v2~1fullstats/post
То нужно interval в массиве как-то передать?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот