17.05.13 — 17:17
Пытаюсь передать параметры для обработки их на сайте и вернуть результат обработки, не могу понять почему в Результате обработки ничего не записывется во временный файл
1 — 17.05.13 — 17:18
Вот Код:
имяФайлаОтправки = «d:request.txt»;
имяФайлОтправки = ПолучитьимяВременногоФайла(«txt»);
ЗаписьТекста = Новый ЗаписьТекста(имяФайлаОтправки);
ЗаписьТекста.Записать(«code=»+КодФормы+»&series=»+СерияБСО+»&number=»+НомерБСО);
ЗаписьТекста.Закрыть();
имяВыходногоФайла = ПолучитьимяВременногоФайла(«xml»); // наш сервер возвращает ответы в виде XML
//имяВыходногоФайла = «d:answer.xml»;
ФайлОтправки = Новый Файл(имяФайлаОтправки);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
Соединение = Новый HTTPСоединение(«www.m.blank.bisc.by/Query»);
Заголовки = Новый Соответствие();
//Заголовки.Вставить(«host», «http://m.blank.bisc.by/Query:8080»);
/////
Запрос = Новый HTTPЗапрос();
Запрос.УстановитьТелоИзСтроки();
Соединение.Записать(Запрос);
Соединение.ОтправитьДляОбработки(Запрос,»GetAnswer», имяВыходногоФайла, Заголовки);
Попытка
УдалитьФайлы(имяФайлаОтправки);
Исключение
КонецПопытки;
// обработаем ответ сервера
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(имяВыходногоФайла);
Пока ЧтениеXML.Прочитать() Цикл
// чтение ответа в виде XML файла
КонецЦикла;
ЧтениеXML.Закрыть();
2 — 17.05.13 — 17:18
Продолжайте пытатся, на следующий раз получится
3 — 17.05.13 — 17:19
не обращайте внимание на пустой запрос, результатом обратоки явлется возвращаемый xml файл
4 — 17.05.13 — 17:26
(3) Ошибку-то какую выдает?
5 — 17.05.13 — 17:28
{Форма.Форма.Форма(53)}: Ошибка при вызове метода контекста (ОткрытьФайл)
ЧтениеXML.ОткрытьФайл(имяВыходногоФайла);
по причине:
Файл не обнаружен ‘C:UsersAppDataLocalTempv8_92D9_75.xml’
6 — 17.05.13 — 17:29
(0) всё, что связано с сайтами, внятно разжовано в (ОбщийМодуль||Обработка).ОбменССайтом
7 — 17.05.13 — 17:34
(3) Запрос = Новый HTTPЗапрос();
Запрос.УстановитьТелоИзСтроки();
Соединение.Записать(Запрос);
Соединение.ОтправитьДляОбработки(Запрос…
а так разве можно Put и Post с одинаковым запросом, тем более что он пустой ?
8 — 17.05.13 — 17:40
(7)
результатом обработки пустого запроса будет xmlфайл с соообщением, пытаюсь понять почему не отрабатывает создание временного файла
9 — 17.05.13 — 17:42
вот так пробуй:
ИмяФайлаОтправки = ПолучитьИмяВременногоФайла(«txt»);
POSTПараметры = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.UTF8,, Истина, Символы.ПС); //ТекстБезБОМ
POSTПараметры.Записать(«code=» + КодФормы + «&series=» + СерияБСО + «&number=» + НомерБСО);
POSTПараметры.Закрыть();
ИмяВыходногоФайла = ПолучитьИмяВременногоФайла(«xml»);
ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
Данные = «code=» + КодФормы + «&series=» + СерияБСО + «&number=» + НомерБСО;
Заголовки = Новый Соответствие();
Заголовки.Вставить(«POST /Query HTTP/1.1»);
Заголовки.Вставить(«Host», «www.m.blank.bisc.by»);
Заголовки.Вставить(«Referer», «www.m.blank.bisc.by»);
Заголовки.Вставить(«Content-Type», «application/x-www-form-urlencoded»);
Заголовки.Вставить(Данные);
Соединение = Новый HTTPСоединение(«www.m.blank.bisc.by»);
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, «v8», ИмяВыходногоФайла, Заголовки);
Попытка
УдалитьФайлы(ИмяФайлаОтправки);
Исключение
КонецПопытки;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяВыходногоФайла);
Пока ЧтениеXML.Прочитать() Цикл
…
КонецЦикла;
ЧтениеXML.Закрыть();
Попытка
УдалитьФайлы(ИмяВыходногоФайла);
Исключение
КонецПопытки;
10 — 17.05.13 — 17:43
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, «v8», ИмяВыходногоФайла, Заголовки);
замени на это
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, «Query», ИмяВыходногоФайла, Заголовки);
11 — 17.05.13 — 17:44
и это лишнее:
Данные = «code=» + КодФормы + «&series=» + СерияБСО + «&number=» + НомерБСО;
и это:
Заголовки.Вставить(Данные);
12 — 17.05.13 — 17:49
Вот ругается:
{Форма.Форма.Форма(82)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, ИмяВыходногоФайла, Заголовки);
по причине:
Ошибка при выполнении файловой операции ‘C:UsersastapenkoAppDataLocalTempv8_92D9_81.xml’
по причине:
Ошибка работы с Интернет: неверный формат ответа шлюзу (502). <!DOCTYPE HTML PUBLIC «-//W3C//DTD HTML 4.0 Transitional//EN»>
<HTML><HEAD><TITLE>Сообщение об ошибке</TITLE>
13 — 17.05.13 — 17:50
(10) Убрал параметр Query на него тогда ругался
14 — 17.05.13 — 17:53
(13) заработало?
15 — 17.05.13 — 17:54
нет.. убрал парамет query до того как получил ошибку в сообщении 12
16 — 17.05.13 — 17:57
ты во втором параметре убрал или в заголовке?
должно быть так:
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, «Query», ИмяВыходногоФайла, Заголовки);
у тебя же адрес:
www.m.blank.bisc.by/Query
17 — 17.05.13 — 17:58
и ты через шлюз работаешь?
18 — 17.05.13 — 18:00
Прокси = Новый ИнтернетПрокси;
Прокси.Установить(«http», «IP твоего шлюза», 3919);
HTTPСоединение = Новый HTTPСоединение(«www.m.blank.bisc.by»,,, Прокси);
19 — 17.05.13 — 18:00
(16)Да, я убрал во втором парметре! Если оставить его на месте то вот какую ошибку ловлю:
{Форма.Форма.Форма(82)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки,»Query», ИмяВыходногоФайла, Заголовки);
по причине:
Ошибка при выполнении файловой операции ‘Query’
по причине:
(17) Да работаю через шлюз, по-другому никак
20 — 17.05.13 — 18:04
(18) ну как, с этим (18) работает?
21 — 17.05.13 — 18:06
(20) к сожелению ошибка всё таже
22 — 17.05.13 — 18:09
уточни у админов параметры прокси.
пример скинул рабочий, правда локально проверенный.
может еще кодировку UTF8 поменять в
POSTПараметры = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.UTF8,, Истина, Символы.ПС); //ТекстБезБОМ
23 — 17.05.13 — 18:11
(22) сейчас попробую
24 — 17.05.13 — 18:13
(22) а на какую кодировку то менять?? я так понимаю Вы уже реализовали нечто подобное и оно у Вас нормально работает?
25 — 17.05.13 — 18:17
да, у меня работает. только я не с этим www.m.blank.bisc.by
этот адрес в браузере не открывается, а через 1с не пытался
26 — 17.05.13 — 18:22
хммм, интересно. на адрес в (25) не заходит, но через http://m.blank.bisc.by/ без проблем
27 — 17.05.13 — 18:25
(26) так может поменять www.m.blank.bisc.by везде на m.blank.bisc.by
28 — 17.05.13 — 18:27
Вариант синтаксиса: По HTTP-запросу
Синтаксис:
ОтправитьДляОбработки(<HTTPЗапрос>, <ИмяВыходногоФайла>)
Параметры:
<HTTPЗапрос> (обязательный)
Тип: HTTPЗапрос.
HTTP-запрос.
<ИмяВыходногоФайла> (необязательный)
sttt это нормально что в синт.помощнике метод описан по другому??
29 — 17.05.13 — 18:33
поменяй адрес http://m.blank.bisc.by/Query и жизнь наладиться и похоже прокси тебе не нужен, проблема была в неверном адресе
у меня так:
ОтправитьДляОбработки(<Источник>, <АдресРесурса>, <ИмяВыходногоФайла>, <Заголовки>)
Параметры:
<Источник> (обязательный)
Тип: Строка.
Имя файла-источника.
<АдресРесурса> (обязательный)
Тип: Строка.
Адрес ресурса на сервере, в который посылаются данные из источника.
<ИмяВыходногоФайла> (обязательный)
Тип: Строка.
Имя выходного файла, в который записываются полученные с сервера данные.
<Заголовки> (необязательный)
Тип: Строка.
Указываются заголовки, добавляемые к запросу на сервер. Текстовые пары вида <Заголовок>:<Значение>, разделяемые комбинацией ВК+ ПС.
Описание:
Отправить ресурс на указанный адрес для обработки.
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение.
30 — 17.05.13 — 18:48
Cпасибо за проявляемый интерес, изменил адрес и вот что пишет:
{Форма.Форма.Форма(86)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки,»Query», ИмяВыходногоФайла, Заголовки);
по причине:
Ошибка работы с Интернет: Couldn’t resolve host name
31 — 17.05.13 — 18:50
(30) у тебя где то адрес старый прописан, ищи
32 — 17.05.13 — 18:50
+(31) у меня работает
33 — 17.05.13 — 18:57
ИмяФайлаОтправки = ПолучитьИмяВременногоФайла(«txt»);
POSTПараметры = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.UTF8,, Истина, Символы.ПС); //ТекстБезБОМ
POSTПараметры.Записать(«code=» + КодФормы + «&series=» + СерияБСО + «&number=» + НомерБСО);
POSTПараметры.Закрыть();
ИмяВыходногоФайла = ПолучитьИмяВременногоФайла(«xml»);
ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
// Данные = «code=» + КодФормы + «&series=» + СерияБСО + «&number=» + НомерБСО;
Заголовки = Новый Соответствие();
Заголовки.Вставить(«POST /Query HTTP/1.1»);
Заголовки.Вставить(«Host», «http://m.blank.bisc.by»);
Заголовки.Вставить(«Referer», «http://m.blank.bisc.by»);
Заголовки.Вставить(«Content-Type», «application/x-www-form-urlencoded»);
// Заголовки.Вставить(Данные);
//Прокси = Новый ИнтернетПрокси;
//Прокси.Установить(«http», «192.168.0.206», 8080);
//Соединение = Новый HTTPСоединение(«http://m.blank.bisc.by»);
Соединение = Новый HTTPСоединение(«http://m.blank.bisc.by»);
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки,»Query», ИмяВыходногоФайла, Заголовки);
Попытка
УдалитьФайлы(ИмяФайлаОтправки);
Исключение
КонецПопытки;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяВыходногоФайла);
Пока ЧтениеXML.Прочитать() Цикл
КонецЦикла;
ЧтениеXML.Закрыть();
Попытка
УдалитьФайлы(ИмяВыходногоФайла);
Исключение
КонецПопытки;
34 — 17.05.13 — 18:58
(33) не срабатывает, ошибка из (30)
35 — 17.05.13 — 19:00
замени везде «http://m.blank.bisc.by» на
Заголовки.Вставить(«Host», «m.blank.bisc.by»);
Заголовки.Вставить(«Referer», «m.blank.bisc.by»);
и т.д.
36 — 17.05.13 — 19:00
и вот это лишнее:
ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
37 — 18.05.13 — 11:04
Всё поправил как Вы сказали, но увы получаю ошибку из (30)
38 — 18.05.13 — 13:05
(37) невероятно))
ладно не буду мучить, вот рабочий вариант, единственное сделано на управляемых формах, соответственно необходимо поменять реквизиты:
ИмяФайлаОтправки = ПолучитьИмяВременногоФайла(«txt»);
POSTПараметры = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.UTF8,, Истина, Символы.ПС); //ТекстБезБОМ
POSTПараметры.Записать(«code=» + Объект.КодФормы + «&series=» + Объект.СерияБСО + «&number=» + Объект.НомерБСО);
POSTПараметры.Закрыть();
ИмяВыходногоФайла = ПолучитьИмяВременногоФайла(«txt»);
Заголовки = Новый Соответствие();
Заголовки.Вставить(«POST /GetAnswer HTTP/1.1»);
Заголовки.Вставить(«Host», «m.blank.bisc.by»);
Заголовки.Вставить(«Referer», «http://m.blank.bisc.by/Query»);
Заголовки.Вставить(«Cookie», «ASP.NET_SessionId=orlnnpbz2vrxrbuobsh4fmom»); // без этих кукисов работать не будет и в ЗаголовокGET такой же должен быть. посмотри по форуму, недавно пробегал пример как куки подставлять
Заголовки.Вставить(«Connection», «keep-alive»);
Заголовки.Вставить(«Content-Type», «application/x-www-form-urlencoded»);
Соединение = Новый HTTPСоединение(«m.blank.bisc.by»);
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, «GetAnswer», ИмяВыходногоФайла, Заголовки);
ЗаголовокGET = Новый Соответствие();
ЗаголовокGET.Вставить(«GET /BlankInfo HTTP/1.1»);
ЗаголовокGET.Вставить(«Host», «m.blank.bisc.by»);
ЗаголовокGET.Вставить(«Referer», «http://m.blank.bisc.by/Query»);
ЗаголовокGET.Вставить(«Cookie», «ASP.NET_SessionId=orlnnpbz2vrxrbuobsh4fmom»);
ЗаголовокGET.Вставить(«DNT», «1»);
ЗаголовокGET.Вставить(«Connection», «keep-alive»);
Соединение.Получить(«/BlankInfo», ИмяВыходногоФайла, ЗаголовокGET);
Попытка
УдалитьФайлы(ИмяФайлаОтправки);
Исключение
КонецПопытки;
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ИмяВыходногоФайла);
Объект.Ответ = ТекстовыйДокумент.ПолучитьТекст();
ЭтаФорма.ОтветHTML = ТекстовыйДокумент.ПолучитьТекст();
Попытка
УдалитьФайлы(ИмяВыходногоФайла);
Исключение
КонецПопытки;
39 — 18.05.13 — 13:25
Спасибо Вам большое, буду разбираться…!
40 — 18.05.13 — 22:22
ошибки о которых писал выше отсутствуют, спасибо за это!!!
с куки пока не разобрался увы!
41 — 19.05.13 — 22:53
придется переделать под:
WinHttp = Новый COMОбъект(«WinHttp.WinHttpRequest.5.1»);
WinHttp.Option(2,»Windows-1251″);
WinHttp.Open(«POST», «https://site.ru»,0);
WinHttp.Send(НовыйЗапрос);
Кукиз= WinHttp.getResponseHeader(«Set-cookie»);
это нетрудно
42 — 20.05.13 — 10:06
С таким методом пока не приходилось сталкиваться, буду пытаться! Спасиб
43 — 20.05.13 — 10:15
(41) 1с тоже с куками умеет
44 — 20.05.13 — 10:16
(43) может подкинете где почитать, хотелось бы обойтись без ком объектов
45 — 20.05.13 — 10:17
HTTPОтвет = Соединение.ОтправитьДляОбработки(Запрос…
далее смотрим HTTPОтвет
46 — 20.05.13 — 10:42
(45) Это вроде только с 8.1.18?
47 — 20.05.13 — 10:43
(46) а че у когото не что ли?
48 — 20.05.13 — 11:01
всё норм у меня 8.2
49 — 20.05.13 — 11:28
Sttt, есть к Вам вопрос, как к человеку проявившему наибольшее внимание… Для чего мне нужны cookie в моем случае? может из-за непонимания вопроса у меня ничего и не выходит…..
в принципе если кто сможет пояснить,буду очень признателен
50 — 20.05.13 — 11:29
Ниже содержание, вернувшегося в результате обработки запроса, сообщения
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href=»/Query»>here</a>.</h2>
</body></html>
51 — 20.05.13 — 12:55
до того момента как всё заработает осталось немного, только с куки разобраться…
52 — 21.05.13 — 11:39
поднимаю
53 — 21.05.13 — 11:52
(51) в чем проблемы ? ЗаголовкиЗапроса.Вставить(«Cookie», Cookie.Имя + «=» + Cookie.Текст);
54 — 21.05.13 — 12:51
(51) c кодом нет проблемы. Не понимаю что есть Cookie.Имя и Cookie.Текст, и откуда их брать.
P.S. сорри за жесткий тупняк, с моей стороны
55 — 21.05.13 — 15:17
Вот исходный код страницы с обработанным запросом (параметры забивал вручную)…
<?xml version=»1.0″ encoding=»UTF-8″?>
<!DOCTYPE html PUBLIC «-//WAPFORUM//DTD XHTML Mobile 1.0//EN»
«http://www.wapforum.org/DTD/xhtml-mobile10.dtd»>
<html>
<head>
<title>Мобильная версия — АС БДБ</title>
<link href=»/Resources/Content/core.css» rel=»stylesheet» type=»text/css» />
</head>
<body>
<div id=»header» class=»header»>
<a href=»/»>АС БДБ</a>
</div>
<div id=»subtitle» class=»subtitle»>
Запрос обработан
</div>
<div id=»body» class=»body»>
<div id=»RequestInfoDiv»>
<span>
<label for=»Blank_Code»>Код</label>: <strong>401851</strong><br />
<label for=»Blank_Name»>Наименование</label>: <strong>ТН-2 (ПЭВМ) а4 1х2 </strong><br />
<label for=»Blank_Series»>Серия</label>: <strong>ФК</strong><br />
<label for=»Blank_Number»>Номер</label>: <strong>1083246</strong>
</span>
</div>
<hr />
<u>Приобретен</u>
<div id=»PurchaseInfoTable»>
<label for=»Blank_PurchaseInfo_RegistrationNumber»>УНП</label>: <strong>290473870</strong><br />
<label for=»Blank_PurchaseInfo_EconomicEntityName»>Наименование</label>: <strong>Общество с ограниченной ответственностью "Успех про"</strong><br />
<label for=»Blank_PurchaseInfo_Date»>Дата</label>: <strong>4.3.2013</strong><br />
</div>
</div>
<div id=»footer» class=»footer»>
<a href=»/Soi»>Полная версия сайта</a>
<br />
<span>© Расчетный центр НБ РБ</span>
</div>
</body>
</html>
56 — 21.05.13 — 16:47
Кто сталкивался, обратите внимание, не проходите мимо
(38) код отправки запроса
(55) обработанный запрос (параметры рууками заполнял)
(50) файл полученный с сайта
Как в 1с вместо (50) получить нормальный ответ, который содержится в (55) ??
57 — 21.05.13 — 16:49
fiddler поставь и посмотри что передаешь ты, а что браузер
58 — 21.05.13 — 17:12
(57) попробую позже, но сейчас нет возможности (нет прав)!!!
вопрос еще актуален
59 — 21.05.13 — 17:15
(54) на то они и куки, что понимаются клиентом и сервером. Если не знаешь протокола общения, то и не лезь
60 — 21.05.13 — 17:33
(56)
Ну типа подумать головой и отработать редирект, не?
61 — 21.05.13 — 18:31
Спасибо всем кто попытался помочь, в особенности Sttt !!!!
Всё заработало благодаря тулзе fiddler
oleg_km
62 — 21.05.13 — 22:10
(61) В следующий раз прямо с нее и начинай
-
Добрый день, мне необходимо отправить на сайт данные из 1C в JSON формате (по сути текстовый файл с определенной структурой). Но не могу понять, как избавиться от ошибки:
«{Обработка.КрКл_1СВеб.Форма.Форма.Форма(406)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс,
по причине:
Ошибка работы с Интернет: Не могу установить соединение»Я реализовал такую обработку:
// Создаем объект HTTP-соединения с заданным сервером // Последний параметр указывает будет ли использоваться // защищенное соединение HTTP = Новый HTTPСоединение("185.185.70.177",,,,,Истина); Ресурс = "/1c/sendFile"; // Создаем временный файл, который будет // передан в теле POST-запроса ФайлЗапроса = ПолучитьИмяВременногоФайла(); ТекстЧт = Новый ТекстовыйДокумент; ТекстЧт.Прочитать("C:UsersAleksandrDesktopJSON.txt"); ТелоЗапроса = ТекстЧт; Объект.Реквизит1 =ТелоЗапроса; // Записываем в файл текстовое содержимое // тела запроса (переменная "ТелоЗапроса") ТекстовыйФайл = Новый ТекстовыйДокумент; ТекстовыйФайл.УстановитьТекст(ТелоЗапроса); ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.ANSI); // Получаем размер отправляемых данных в теле запроса ФайлОтправки = Новый Файл(ФайлЗапроса); РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер()); // Подготовим временный файл для получения тела // ответа POST-запроса ФайлРезультата = ПолучитьИмяВременногоФайла(); // Для того, чтобы установить заголовки // POST-запроса создадим соответствие ЗаголовокHTTP = Новый Соответствие(); // В этом примере устанавливаем в заголовках запроса // размер передаваемых данных и их тип ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки); ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8"); HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс, ФайлРезультата, ЗаголовокHTTP); // Получаем ответ веб-сервера на POST-запрос // в виде текста ТекстовыйФайлОтвет = Новый ТекстовыйДокумент; ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8); СтрокаОтветСервера = ТекстовыйФайлОтвет.ПолучитьТекст();
-
Убрал из строки значение Истина HTTP = Новый HTTPСоединение(«185.185.70.177»,,,,,Истина); т.е. получилось так
HTTP = Новый HTTPСоединение(«185.185.70.177»,,,,,); Истина — это защищенное соединение, далее отключил антивирус, после этого ошибки ни какие не выдаются, но проблема в том, что
СтрокаОтветСервера приходит с такими символами:»�����������������», что может быть? Веб ресурс проверял с помощью сервиса http://www.hurl.it/ — все работает.Последнее редактирование: 7 апр 2018 -
Online
nbIpKuH_BaH9I
Модераторы
Команда форума
Модератор- Регистрация:
- 16 сен 2009
- Сообщения:
- 8.123
- Симпатии:
- 550
- Баллы:
- 204
-
не то, я это уже сделал, мне нужно это отправить на веб. И сейчас при отправке, я получаю ответ от сервера такого вида: �����������������
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.890
- Симпатии:
- 1.030
- Баллы:
- 204
Вы на 100% уверены, что ответ приходит в кодировке UTF-8, а не Win1251?
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.890
- Симпатии:
- 1.030
- Баллы:
- 204
В таком случае, для чего вы делаете
ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8);?
-
чтобы понять что все ушло без ошибок
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.890
- Симпатии:
- 1.030
- Баллы:
- 204
Сделайте
ТекПоток = Новый ЧтениеТекста(ИмяФайлаОтвета); ОтветСервера = ТекПоток.Прочитать(); ТекПоток.Закрыть();
и посмотрите на результат
-
проверил, utf-8, но обнаружил, что если структуру JSON с информацией загружать не из текстового файла, а из строки так:
ДанныеОКлиенте = Новый Структура("kodapi", Объект.api_key); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, ДанныеОКлиенте); СтрокаДляТела = ЗаписьJSON.Закрыть();
то отправляется и приходит правильный ответ. Тогда у меня вопрос почему если из текстового файла — не отправляется нормально. У меня просто довольно большая структура в него сохраняется для отправки. Структуру я проверял (копировал содержимое файла) на спец сервисе, если с него отправлять то ответ приходит правильный.
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.890
- Симпатии:
- 1.030
- Баллы:
- 204
Потому что на первый взгляд
...... ТекстЧт = Новый ТекстовыйДокумент; ТекстЧт.Прочитать("C:UsersAleksandrDesktopJSON.txt"); ТелоЗапроса = ТекстЧт; Объект.Реквизит1 =ТелоЗапроса; ....
есть чушь, т.к. ТекстЧт — это сам объект ТектовыйДокумент, а не его содержимое.
-
это я поправил еще вчера.
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.890
- Симпатии:
- 1.030
- Баллы:
- 204
Значит есть еще какие-то проблемы, известные только вам.
-
Последнее редактирование: 8 апр 2018
-
Да, вы оказались правы, я не сохранил изменения вчера и из-за этого не работало! Спасибо!
Статья основана на запросе клиента:
выгрузка из 1С на сайт после сбоя происходит с ошибкой — ранее работала корректно. Выдает вот такую штуковину
Лог:
Выгружено товаров: 200
Выгружено картинок: 254
Выгружено предложений: 186
Выгружено документов Ремонт: 355
Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка при выполнении файловой операции ‘admin/exchange/auto/?type=catalog&mode=file&filename=import_files/44/446dce7e-0f76-11e1-81d4-0015179911ad_6cba4f76-3289-11e4-adc9-0015179911ac.jpeg’: Ошибка работы с Интернет: неверный формат ответа шлюзу (502). <html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor=»white»>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx-reuseport/1.11.10</center>
</body>
</html>
: Ошибка работы с Интернет: неверный формат ответа шлюзу (502)
Произошла ошибка: . По причине:
Произошла ошибка на стороне сервера. Не получен статус завершения операции. Файл не отправлен (C:UsersUSR1CV82AppDataLocalTemp1cbitriximport_files44446dce7e-0f76-11e1-81d4-0015179911ad_6cba4f76-3289-11e4-adc9-0015179911ac.jpeg.2).
Обмен не выполнен
Ответ сервера:
<head><title>502 Bad Gateway</title></head>
<body bgcolor=»white»>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx-reuseport/1.11.10</center>
</body>
</html>
Выгрузка товаров завершена с ошибками!!!
Техническая информация:
Выгружено товаров: 200
Выгружено картинок: 254
Выгружено предложений: 186
Выгружено документов Ремонт: 355
{Обработка.ОбменССайтом.МодульОбъекта(326)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка при выполнении файловой операции ‘admin/exchange/auto/?type=catalog&mode=file&filename=import_files/44/446dce7e-0f76-11e1-81d4-0015179911ad_6cba4f76-3289-11e4-adc9-0015179911ac.jpeg’: Ошибка работы с Интернет: неверный формат ответа шлюзу (502). <html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor=»white»>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx-reuseport/1.11.10</center>
</body>
</html>
: Ошибка работы с Интернет: неверный формат ответа шлюзу (502)
Произошла ошибка: . По причине:
Произошла ошибка на стороне сервера. Не получен статус завершения операции. Файл не отправлен (C:UsersUSR1CV82AppDataLocalTemp1cbitriximport_files44446dce7e-0f76-11e1-81d4-0015179911ad_6cba4f76-3289-11e4-adc9-0015179911ac.jpeg.2).
Обмен не выполнен
Ответ сервера:
<head><title>502 Bad Gateway</title></head>
<body bgcolor=»white»>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx-reuseport/1.11.10</center>
</body>
</html>
Просьба подсказать, что тут может быть?
Комментарий разработчиков на UMI.CMS А25 по настройке корректной выгрузки из 1С и исправлению ошибок:
502 ошибка возникает в момент, когда сервер не справляется с нагрузкой.
В вашем случае очень похоже, что картинка 446dce7e-0f76-11e1-81d4-0015179911ad_6cba4f76-3289-11e4-adc9-0015179911ac.jpeg является причиной данной проблемы. Возможно, что её размер превышает допустимые сервером нормы. Или же из-за её размера время загрузки увеличивается настолько, что сервер обрубает процесс.
Первая рекомендация — проверить саму картинку и уменьшить её.
Вторая рекомендация (если это не получится) — получить информацию о причинах сбоя у хостера. У него должны быть логи относительно этой ошибки и, возможно, там будет ответ.
Ошибка при отправке запроса: {ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(30)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка работы с Интернет: Не могу установить соед
Были опробованы 2 варианта из https://nsoft-s.com/mcserverhelp/index. … 1crest.htm
поставил свой уинПолучателя и сервер, выходит такая ошибка, нужна помощь
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(31)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
Результат = HTTP.ОтправитьДляОбработки(HTTPЗапрос,»D:abv.txt»);
по причине:
Ошибка работы с Интернет: Не могу установить соединение
Здравствуйте. Это чисто сетевая ошибка.
Если адрес сервера правильный и он работает, то это означает, что либо ваш WEB-сервер MyChat работает на другом порту, либо файрволом закрыт порт, на который вы обращаетесь.
Либо https сертификат самоподписной и не валидный. Это легко проверить, открыв адрес вашего сервера в браузере, например, https://192.168.10.1 (подставьте туда ваш адрес).
Переношу тему в вопросы.
Team lead
Чат со мной
P.S. Предпочтительнее вариант работы через REST, он наиболее универсален и для него не нужны никакие DLL в самой 1С.
Team lead
Чат со мной
Здравствуйте. Продолжаю свои изыскания. В Помощнике — есть действительно 2 варианта —
HTTPСоединение (HTTPConnection)
ОтправитьДляОбработки (Post)
Вариант синтаксиса: По HTTP-запросуСинтаксис:
ОтправитьДляОбработки(<HTTPЗ апрос>, <ИмяВыходногоФайла>)
Параметры:<HTTPЗапрос> (обязательный)
Тип: HTTPЗапрос.
HTTP-запрос.
<ИмяВыходногоФайла> (необязательный)Тип: Строка.
Имя файла, в который следует записать тело ответа.
Если не задан, то тело ответа может быть получено из объекта HTTPОтвет.
Описание варианта метода:Отправляет ресурс по HTTP-запросу.
Вариант синтаксиса: По файлу-источнику и адресу ресурсаСинтаксис:
ОтправитьДляОбработки(<Ист очник>, <АдресРесурса>, <ИмяВыходногоФайла>, <Заголовки>)
Параметры:<Источник> (обязательный)
Тип: Строка.
Адрес файла-источника.
<АдресРесурса> (обязательный)Тип: Строка.
Адрес ресурса на сервере, в который посылаются данные из источника.
<ИмяВыходногоФайла> (обязательный)Тип: Строка.
Имя выходного файла, в который записываются полученные с сервера данные.
<Заголовки> (необязательный)Тип: Соответствие; Строка.
Позволяет добавлять к запросу на сервер заголовки в виде строки, содержащей текстовые пары «Заголовок» — «Значение», разделяемые комбинацией символов ВК + ПС, или в виде cоответствия «Заголовок» — «Значение заголовка».Я взяла пример с рассматриваемой статьи —
Загрузка файлов (изображений, документов и т.п.) на веб-сервер методом POST.
Зачастую возникает необходимость загрузки файлов на веб-сервер. Это может быть, например, изображение к статье на сайте, или фотография для альбома, или архив для файлообменника. Ранее мы рассматривали передачу методом POST параметров или просто файлов. Таким же образом можно и передавать двоичные файлы. Но как быть, если файлы необходимо отправлять вместе с параметрами? Для возможности отправки файлов в этом случае используется HTTP заголовок ContentType:multipart/form-data. Следует заметить, что обычно таким способом передаются файлы через веб-браузеры. Т.е. когда на сайте вы выбираете файл и нажимаете кнопку «Загрузить», то файл передается способом описанным ниже. При таком способе сам файл также задается как переменная, т.е., например, файл передается через параметр file или image. Однако, мы не можем просто передать file=<Двоичные_Данные>. А вот как все таки передать файл мы и рассмотрим ниже.Для возможности вместе с параметрами передавать и двоичные данные (файлы) необходимо сформировать HTTP заголовок Content-Type следующим образом:
Content-Type: multipart/form-data, boundary=<уникальные_данные>
где <уникальные_данные> — это любой набор цифр и/или символов, который будет служить для отделения значений друг от друга. Значение boundary должно быть уникальным в пределах пересылаемой информации, т.е. таких символов не должно встречаться в пересылаемых файлах и переменных.Bounday можно сформировать, например, таким образом
Код 1C v 8.х
boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), «-«, «»);Все данные отделяются друг от друга разделителем boundary. Начинать разделитель нужно с «—«:
Код
—<boundary>
Content-Disposition: form-data; name=»<имя_переменной>»
<пустая_строка>
<значение_переменной>
Для отправки файла необходимо еще добавить тип и имя файла:—<boundary>
Content-Disposition: form-data; name=»<имя_переменной>»; filename=»<имя_файла>»
Content-Type: <тип_файла> (например image/jpeg или text/plain)
<пустая_строка>
<данные_файла>В конце данных нужно закрыть разделитель, добавили в конце разделителя «—«, т.е. вид будет «—<boundary>—«.
Итак, например, нам нужно передать на веб-сервер текстовый файл через параметр «text», его описание через параметр «desc» и id пользователя через параметр «uid», для которого будет загружен наш файл.
Предположим, что файл содержит следующий текст:
Мороз и солнце; день чудесный!
Еще ты дремлешь, друг прелестный —
Пора, красавица, проснись:
Открой сомкнуты негой взоры
Навстречу северной Авроры,
Звездою севера явись!
Описание должно содержать «Стих А.С. Пушкина», а id пользователя равно «0123456». Тогда файл должен быть сформирован следующим образом (для упрощения предположим, что bounday мы уже сформировали и он равен «ccf8111910»)
Код
—ccf8111910
Content-Disposition: form-data; name=»uid»0123456
—ccf8111910
Content-Disposition: form-data; name=»desc»Стих А.С. Пушкина
—ccf8111910
Content-Disposition: form-data; name=»text»; filename=»stih.txt»
Content-Type: text/plainМороз и солнце; день чудесный!
Еще ты дремлешь, друг прелестный —
Пора, красавица, проснись:
Открой сомкнуты негой взоры
Навстречу северной Авроры,
Звездою севера явись!
—ccf8111910—А теперь перейдем непосредственно к 1С. Пусть у нас будет форма с реквизитами «Пользователь», «Описание» и «ИмяФайла». Реализуем отправку данных, описанным выше способом
Код 1C v 8.х
// подготовим файл с данными для отправки
имяФайлаОтправки = ПолучитьимяВременногоФайл а(«txt»);
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), «-«, «»);ЗаписьТекста = Новый ЗаписьТекста(имяФайлаОтпр� �вки);
// параметр «uid»
ЗаписьТекста.ЗаписатьСтро� �у(«—«+boundary);
ЗаписьТекста.ЗаписатьСтро� �у(«Content-Disposition: form-data; name=»»uid»»»);
ЗаписьТекста.ЗаписатьСтро� �у(«»);
ЗаписьТекста.ЗаписатьСтро� �у(Пользователь);// параметр «desc»
ЗаписьТекста.ЗаписатьСтро� �у(«—«+boundary);
ЗаписьТекста.ЗаписатьСтро� �у(«Content-Disposition: form-data; name=»»desc»»»);
ЗаписьТекста.ЗаписатьСтро� �у(«»);
ЗаписьТекста.ЗаписатьСтро� �у(Описание);// параметр «text»
ФайлДляПередачи = Новый ТекстовыйДокумент;
ФайлДляПередачи.Прочитать( имяФайла);ЗаписьТекста.ЗаписатьСтро� �у(«—«+boundary);
ЗаписьТекста.ЗаписатьСтро� �у(«Content-Disposition: form-data; name=»»text»»; filename=»»stih.txt»»»);
ЗаписьТекста.ЗаписатьСтро� �у(«Content-Type: text/plain»);
ЗаписьТекста.ЗаписатьСтро� �у(«»);
ЗаписьТекста.Записать(Файл ДляПередачи.ПолучитьТекст( ));
ЗаписьТекста.ЗаписатьСтро� �у(«»);// закроем разделитель
ЗаписьТекста.ЗаписатьСтро� �у(«—«+boundary+»—«);ЗаписьТекста.Закрыть();
ФайлОтправки = Новый Файл(имяФайлаОтправки);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Разм� �р());// передадим данные на сервер
Заголовки = Новый Соответствие();
Заголовки.Вставить(«Content-Type», «multipart/form-data, boundary=»+boundary);
Заголовки.Вставить(«Content-Lenght», РазмерФайлаОтправки);Соединение = Новый HTTPСоединение(«www.mysite.com»);
Соединение.ОтправитьДляОб� �аботки(имяФайлОтправки, «postFile.php», имяВыходногоФайла, Заголовки);Естественно — немного переделав. Вот что получилось.
HTTPСервер = «сайт_куда_отправляю.ru»;
ИМяФайла = «C:Каталогфайл.csv»;
ФайлРезультат = «C:result.xml»;Попытка
Соединение = Новый HTTPСоединение(HTTPСервер,80,»По льзователь»,»Пароль»,,Истина );Исключение
Сообщить(ОписаниеОшибки());
Соединение = Неопределено;
КонецПопытки;Если Соединение = Неопределено Тогда
Сообщить(«Не удалось подключиться к серверу, указанному в настройке обмена! Обработка прервана!»);КонецЕсли;
имяФайлаОтправки = ПолучитьимяВременногоФайл а(«txt»);
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), «-«, «»);ЗаписьТекста = Новый ЗаписьТекста(имяФайлаОтпр� �вки);
// параметр «uid»
ЗаписьТекста.ЗаписатьСтро� �у(«—«+boundary);
ЗаписьТекста.ЗаписатьСтро� �у(«Content-Disposition: form-data; name=»»uid»»»);
ЗаписьТекста.ЗаписатьСтро� �у(«»);
ЗаписьТекста.ЗаписатьСтро� �у(«Пользователь»);// параметр «desc»
ЗаписьТекста.ЗаписатьСтро� �у(«—«+boundary);
ЗаписьТекста.ЗаписатьСтро� �у(«Content-Disposition: form-data; name=»»desc»»»);
ЗаписьТекста.ЗаписатьСтро� �у(«»);
ЗаписьТекста.ЗаписатьСтро� �у(«Описание»);// параметр «text»
ФайлДляПередачи = Новый ТекстовыйДокумент;
ФайлДляПередачи.Прочитать( имяФайла);ЗаписьТекста.ЗаписатьСтро� �у(«—«+boundary);
ЗаписьТекста.ЗаписатьСтро� �у(«Content-Disposition: form-data; name=»»csv»»; filename=»»файл.csv»»»);
ЗаписьТекста.ЗаписатьСтро� �у(«Content-Type: text/plain»);
ЗаписьТекста.ЗаписатьСтро� �у(«»);
ЗаписьТекста.Записать(Файл ДляПередачи.ПолучитьТекст( ));
ЗаписьТекста.ЗаписатьСтро� �у(«»);// закроем разделитель
ЗаписьТекста.ЗаписатьСтро� �у(«—«+boundary+»—«);ЗаписьТекста.Закрыть();
ФайлОтправки = Новый Файл(имяФайлаОтправки);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Разм� �р());// передадим данные на сервер
Заголовки = Новый Соответствие();
Заголовки.Вставить(«Content-Type», «multipart/form-data, boundary=»+boundary);
Заголовки.Вставить(«Content-Lenght», РазмерФайлаОтправки);Попытка
Соединение.ОтправитьДляОб� �аботки(ИмяФайлаОтправки,Ф� �йлРезультат);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопыткиДает ошибку
{Форма.Форма.Форма(96)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Неправильный путь к файлу. В чем подвох?