|
Помогите с POST запросом | ☑ | ||
---|---|---|---|---|
0
bodri
14.02.18
✎
08:24
|
Доброго времени суток.
Прошу сильно не пинать, т.к. с эти работаю впервые. Необходимо отправить заявку на сайт, пример рабочего запроса: pharmcenter.kz/External1CDirectory/UploadOrders?skey=(ХэшМД5)&order_xml=<?xml version="1.0" encoding="utf-8"?> <root> <d id="149"> <i id="48" count="20" expired="01.10.2020" price="913,48"></i> </d> </root> я отправляю так: КолСтрок = 0; #Область XML ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла(); Запись = Новый ЗаписьXML; ПараметрыЗаписи = Новый ПараметрыЗаписиXML("utf-8"); Запись.ОткрытьФайл(ИмяФайлаЗапроса,ПараметрыЗаписи); Запись.ЗаписатьОбъявлениеXML(); #Область root Запись.ЗаписатьНачалоЭлемента("root"); #Область Контрагент Запись.ЗаписатьНачалоЭлемента("d"); Запись.ЗаписатьАтрибут("id",Контрагент.ID_pharmcenter_kz); #Область Товары Для Каждого Стр из Таблица Цикл Если ПустаяСтрока(Стр.ID_Товара) Тогда Продолжить; КонецЕсли; КолСтрок = КолСтрок + 1; Запись.ЗаписатьНачалоЭлемента("i"); Запись.ЗаписатьАтрибут("id",Стр.ID_Товара); Запись.ЗаписатьАтрибут("count",Формат(Стр.Количество,"ЧДЦ=; ЧГ=0")); Запись.ЗаписатьАтрибут("expired",Формат(Стр.СрокГодности,"ДФ=dd.MM.yyyy")); Запись.ЗаписатьАтрибут("price",Формат(Стр.Цена,"ЧДЦ=2; ЧН=0; ЧГ=0")); Запись.ЗаписатьКонецЭлемента(); КонецЦикла; #КонецОбласти //Товары Запись.ЗаписатьКонецЭлемента(); #КонецОбласти //Контрагент Запись.ЗаписатьКонецЭлемента(); #КонецОбласти //root Запись.Закрыть(); #КонецОбласти //XML Если КолСтрок = 0 тогда Возврат; КонецЕсли; Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяФайлаЗапроса); ТекТекст = Текст.ПолучитьТекст(); ТекТекст = СтрЗаменить(ТекТекст,"""/>","""></i>"); Текст.Очистить(); Текст.УстановитьТекст(ТекТекст); Текст.Записать(ИмяФайлаЗапроса); Сервер = "pharmcenter.kz"; HTTPСоединение = Новый HTTPСоединение(Сервер); Если ПустаяСтрока(ПереданныйХеш) Тогда Хеш = Новый ХешированиеДанных(ХешФункция.MD5); Хеш.Добавить("" + СокрЛП(Пользователь) + "+" + СокрЛП(Пароль)); ХешТекст = СтрЗаменить(НРег(Хеш.ХешСумма)," ",""); Иначе ХешТекст = ПереданныйХеш; КонецЕсли; ТекстЗапроса = "/External1CDirectory/UploadOrders?skey=" + ХешТекст + "&order_xml="; HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса); HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса); Ответ = Новый Структура; Ответ.Вставить("Запрос",ТекстЗапроса); Попытка ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); Ответ.Вставить("Ответ",ОтветHTTP.ПолучитьТелоКакСтроку()); Исключение Ответ.Вставить("Ответ",ОписаниеОшибки()); Ответ.Вставить("Ошибка"); КонецПопытки; Возвращает ошибку сервера: error_order_xml_empty (Дословно, ошибка заявки xml пуст), в связи с чем зародился вопрос: Как можно проверить какой текст отправляется? |
|||
1
sitex
naïve
14.02.18
✎
08:33
|
Проверьте какое тело (body) отправляете в ИмяФайлаЗапроса.
|
|||
2
bodri
14.02.18
✎
08:40
|
проверил, вот содержание файла:
<?xml version="1.0" encoding="utf-8"?> <root> <d id="149"> <i id="48" count="20" expired="01.10.2020" price="913,48"></i> </root> |
|||
3
bodri
14.02.18
✎
08:41
|
(2) много вырезал
<?xml version="1.0" encoding="utf-8"?> <root> <d id="149"> <i id="48" count="20" expired="01.10.2020" price="913,48"></i> </d> </root> |
|||
4
sitex
naïve
14.02.18
✎
08:42
|
(3) также укажи заголовки "Content-Type" ,"Content-Lenght"
|
|||
5
ASV
14.02.18
✎
08:43
|
Ресурс="pharmcenter.kz/External1CDirectory/UploadOrders"
Тело="skey=(ХэшМД5)&order_xml=<?xml version=1.0 encoding=utf-8?> <root> <d id=149> <i id=48 count=20 expired=01.10.2020 price=913,48></i> </d></root>" Заголовки = Новый Соответствие; Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded;"); Запрос = Новый HTTPЗапрос(Ресурс, Заголовки); Запрос.УстановитьТелоИзСтроки(Тело); Результат = Соединение.ОтправитьДляОбработки(Запрос); |
|||
6
ASV
14.02.18
✎
08:46
|
(5)
Сервер = "pharmcenter.kz"; Ресурс="/External1CDirectory/UploadOrders" |
|||
7
Сияющий в темноте
14.02.18
✎
08:48
|
А где в 0 POST запрос?
Я пока вижу попытку все в GET зафигачить в параметрах адреса указывается имя файла,а сам файл кладется в тело,разделенный границами,которые добавляются в заголовки |
|||
8
Redkiy
14.02.18
✎
08:49
|
В чем смысл сохранять хмл в файл? С коде не видно что ты потом этот мусор удаляешь.
Так не проще? ТекстXML = Запись.Закрыть(); |
|||
9
bodri
14.02.18
✎
08:50
|
(7) (8) делал по СП
HTTPСоединение (HTTPConnection) ОтправитьДляОбработки (Post) Синтаксис: ОтправитьДляОбработки(<HTTPЗапрос>, <ИмяВыходногоФайла>) Параметры: <HTTPЗапрос> (обязательный) Тип: HTTPЗапрос. HTTP-запрос. <ИмяВыходногоФайла> (необязательный) Тип: Строка. Имя выходного файла, в который записываются полученные с сервера данные. Если не указан или содержит пустую строку, то тело ответа может быть получено из объекта HTTPОтвет. Возвращаемое значение: Тип: HTTPОтвет. Описание: Отправляет данные на указанный адрес для обработки при помощи HTTP-запроса POST. Доступность: Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). Пример: // инициализируем объект для записи XML ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла(); ОбъектЗапись = Новый ЗаписьXML; ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("windows-1251", , Ложь); ОбъектЗапись.ОткрытьФайл(ИмяФайлаЗапроса, ПараметрыЗаписиXML); ОбъектЗапись.ЗаписатьОбъявлениеXML(); // выводим корневой элемент Request ОбъектЗапись.ЗаписатьНачалоЭлемента("Request"); // выводим элемент ClientInfo ОбъектЗапись.ЗаписатьНачалоЭлемента("ClientInfo"); ОбъектЗапись.ЗаписатьАтрибут("email", АдресОтправителя); ОбъектЗапись.ЗаписатьКонецЭлемента(); Если ИмяФайлаСертификата <> Неопределено Тогда // кодируем в Base64 сертификат ДвДанные.Прочитать(ИмяФайлаСертификата); ФайлСертификатаBase64 = ДвДанные.ПолучитьСтрокуBase64(); // выводим элемент Certificate ОбъектЗапись.ЗаписатьНачалоЭлемента("Certificate"); ОбъектЗапись.ЗаписатьТекст(ФайлСертификатаBase64); ОбъектЗапись.ЗаписатьКонецЭлемента(); КонецЕсли; Если ИмяФайлаЗашифрованногоКонтейнера <> Неопределено Тогда // кодируем в Base64 зашифрованный контейнер ДвДанные.Прочитать(ИмяФайлаЗашифрованногоКонтейнера); ФайлЗашифрованногоКонтейнераBase64 = ДвДанные.ПолучитьСтрокуBase64(); // выводим элемент Data ОбъектЗапись.ЗаписатьНачалоЭлемента("Data"); ОбъектЗапись.ЗаписатьТекст(ФайлЗашифрованногоКонтейнераBase64); ОбъектЗапись.ЗаписатьКонецЭлемента(); КонецЕсли; // записываем конец для корневого элемента ОбъектЗапись.ЗаписатьКонецЭлемента(); ОбъектЗапись.Закрыть(); АдресСервераОнлайнПроверки = "onlinefc.taxcom.ru"; РесурсНаСервере = "/online_fc/online_fc.dll" + ?(ПолучитьСертификат, "?IncludeCertificate", ""); // устанавливаем соединение с сервером Попытка Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки, , , , Прокси); Исключение Сообщить("Не удалось установить соединение с сервером онлайн-проверки:" + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное); Возврат; КонецПопытки; // посылаем запрос Попытка HTTPЗапрос = Новый HTTPЗапрос(РесурсНаСервере); HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса); Результат = Соединение.ОтправитьДляОбработки(Запрос); Соединение = Неопределено; Если Результат.КодСостояния > 299 Тогда Сообщить("Код состояния " + Результат.КодСостояния + ". Проверка не выполнена"); КонецЕсли; Исключение Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное); КонецПопытки; |
|||
10
VS-1976
14.02.18
✎
09:10
|
Поставь себе Fiddler и проверяй сервис.
|
|||
11
bodri
14.02.18
✎
09:15
|
поправил немного:
НачалоТекста = "&order_xml="; Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяФайлаЗапроса); ТекТекст = Текст.ПолучитьТекст(); ТекТекст = СтрЗаменить(ТекТекст,"""/>","""></i>"); Текст.Очистить(); Текст.УстановитьТекст(НачалоТекста + ТекТекст); Текст.Записать(ИмяФайлаЗапроса); Сервер = "pharmcenter.kz"; HTTPСоединение = Новый HTTPСоединение(Сервер); Если ПустаяСтрока(ПереданныйХеш) Тогда Хеш = Новый ХешированиеДанных(ХешФункция.MD5); Хеш.Добавить("" + СокрЛП(Пользователь) + "+" + СокрЛП(Пароль)); ХешТекст = СтрЗаменить(НРег(Хеш.ХешСумма)," ",""); Иначе ХешТекст = ПереданныйХеш; КонецЕсли; ТекстЗапроса = "/External1CDirectory/UploadOrders?skey=" + ХешТекст; Заголовки = Новый Соответствие; Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded;"); HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса,Заголовки); HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса); Результат "ОК" заявка появилась на сайте |
|||
12
bodri
14.02.18
✎
09:16
|
(10) дело не в проверке сервиса, а в том, что и как именно отправляет 1С
|
|||
13
VS-1976
14.02.18
✎
09:20
|
(12) Я имел ввиду подкидываешь сформированную строку и смотришь что не так.
|
|||
14
VS-1976
14.02.18
✎
09:20
|
(13) точнее сформированный запрос
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |