Добрый день!
Возникают проблемы при попытке обмена данными 1C и Битрикс:
1с выдает такое сообщение:
Выгружено товаров: 1108
Выгружено предложений: 4616
{Обработка.ОбменССайтом(320)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка при выполнении файловой операции ‘bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=offers.xml’
Произошла ошибка: . По причине:
Произошла ошибка на стороне сервера. Не получен статус завершения операции. Файл не отправлен (C:Documents and SettingsUSERLocal SettingsTemp1cbitrixoffers.xml.031).
Обмен не выполнен
Ответ сервера:
<ht ml xmlns=»http://www.w3.org/1999/xhtml» xml:lang=»en» lang=»en»>
<head>
<ST YLE type=»text/css»><!—
*
{
margin: 0px;
}
body
{
font-family: verdana, helvetica, sans-serif;
font-size: 13px;
padding: 0px;
background-color: #ffffff;
color: #111111;
}
a
{
background-color: inherit;
color: #0000EE;
}
a:hover
{
text-decoration: none;
}
p
{
text-align: justify;
margin-bottom: 15px;
line-height: 22px;
}
ul
{
list-style: disc;
padding-left: 15px;
margin-bottom: 15px;
}
h3
{
font-size: 20px;
margin-bottom: 30px;
}
h4
{
font-size: 13px;
margin-bottom: 5px;
}
#container
{
margin: 0px 0px 0px 0px;
}
#header
{
background-color: #660000;
color: #fff;
padding: 10px 40px 10px 40px;
}
#headerok
{
background-color: #006600;
color: #fff;
padding: 10px 40px 10px 40px;
}
#header h1
{
font-size: 30px;
}
#header h2
{
font-size: 14px;
}
#headerok h1
{
font-size: 30px;
}
#headerok h2
{
font-size: 14px;
}
#body
{
margin: 10px 40px 10px 40px;
border-bottom: solid 1px #DADADA;
}
#footer
{
margin: 0px 40px 0px 40px;
}
#signature
{
margin: 0px 40px 0px 40px;
}
#body p
{
}
#errorwhat
{
padding: 10px 0px;
font-size: 20px;
border-bottom: solid 1px #DADADA;
}
.clearit
{
clear: both;
height: 1px;
}
—></STYLE>
<met a http-equiv=»Content-Type» content=»text/html;charset=iso-8859-1″ />
<title>ERROR: The requested URL could not be retrieved</title>
</head>
<body>
<div id=»container»>
<div id=»header»>
<h1>ERROR</H1>
<h2>The requested URL could not be retrieved</h2>
</div>
<div id=»body»>
<div id=»what»>
While trying to retrieve the URL: <a href=»»></a>
</div>
<div id=»errortitle»>
The following error was encountered:
</div>
<div id=»errorwhat»>
Zero Sized Reply
</div>
<div id=»errordescription»>
Squid did not receive any data for this request.
</div>
</div>
</div>
</body>
</html>
Выгрузка товаров завершена с ошибками!!!
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) В следующий раз прямо с нее и начинай
Здравствуйте. Продолжаю свои изыскания. В Помощнике — есть действительно 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)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Неправильный путь к файлу. В чем подвох?
Статья основана на запросе клиента:
выгрузка из 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 является причиной данной проблемы. Возможно, что её размер превышает допустимые сервером нормы. Или же из-за её размера время загрузки увеличивается настолько, что сервер обрубает процесс.
Первая рекомендация — проверить саму картинку и уменьшить её.
Вторая рекомендация (если это не получится) — получить информацию о причинах сбоя у хостера. У него должны быть логи относительно этой ошибки и, возможно, там будет ответ.