Имя: Пароль:
1C
1С v8
v8: HTTP Запрос (ОтправитьДляОбработки())
,
0 artyom_astt
 
17.05.13
17:17
Пытаюсь передать параметры для обработки их на сайте и вернуть результат обработки, не могу понять почему в Результате обработки  ничего не записывется во временный файл
1 artyom_astt
 
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 Krendel
 
17.05.13
17:18
Продолжайте пытатся, на следующий раз получится ;-)
3 artyom_astt
 
17.05.13
17:19
не обращайте внимание на пустой запрос, результатом обратоки явлется возвращаемый xml файл
4 oleg_km
 
17.05.13
17:26
(3) Ошибку-то какую выдает?
5 artyom_astt
 
17.05.13
17:28
{Форма.Форма.Форма(53)}: Ошибка при вызове метода контекста (ОткрытьФайл)
   ЧтениеXML.ОткрытьФайл(имяВыходногоФайла);
по причине:
Файл не обнаружен 'C:\Users\AppData\Local\Temp\v8_92D9_75.xml'
6 drcrasher
 
17.05.13
17:29
(0) всё, что связано с сайтами, внятно разжовано в (ОбщийМодуль||Обработка).ОбменССайтом
7 Infsams654
 
17.05.13
17:34
(3) Запрос = Новый HTTPЗапрос();
   Запрос.УстановитьТелоИзСтроки();
   Соединение.Записать(Запрос);
   
   Соединение.ОтправитьДляОбработки(Запрос...
а так разве можно Put и Post с одинаковым запросом, тем более что он пустой ?
8 artyom_astt
 
17.05.13
17:40
(7)
результатом обработки пустого запроса будет xmlфайл с соообщением, пытаюсь понять почему не отрабатывает создание временного файла
9 sttt
 
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 sttt
 
17.05.13
17:43
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, "v8", ИмяВыходногоФайла, Заголовки);

замени на это
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, "Query", ИмяВыходногоФайла, Заголовки);
11 sttt
 
17.05.13
17:44
и это лишнее:
Данные = "code=" + КодФормы + "&series=" + СерияБСО + "&number=" + НомерБСО;
и это:
Заголовки.Вставить(Данные);
12 artyom_astt
 
17.05.13
17:49
Вот ругается:
{Форма.Форма.Форма(82)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
   Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, ИмяВыходногоФайла, Заголовки);
по причине:
Ошибка при выполнении файловой операции  'C:\Users\astapenko\AppData\Local\Temp\v8_92D9_81.xml'
по причине:
Ошибка работы с Интернет:  неверный формат ответа шлюзу (502). <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Сообщение об ошибке</TITLE>
13 artyom_astt
 
17.05.13
17:50
(10) Убрал параметр Query на него тогда ругался
14 sttt
 
17.05.13
17:53
(13) заработало?
15 artyom_astt
 
17.05.13
17:54
нет.. убрал парамет query до того как получил ошибку в сообщении 12
16 sttt
 
17.05.13
17:57
ты во втором параметре убрал или в заголовке?
должно быть так:
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, "Query", ИмяВыходногоФайла, Заголовки);

у тебя же адрес:
www.m.blank.bisc.by/Query
17 sttt
 
17.05.13
17:58
и ты через шлюз работаешь?
18 sttt
 
17.05.13
18:00
Прокси = Новый ИнтернетПрокси;
Прокси.Установить("http", "IP твоего шлюза", 3919);
HTTPСоединение = Новый HTTPСоединение("www.m.blank.bisc.by",,, Прокси);
19 artyom_astt
 
17.05.13
18:00
(16)Да, я убрал во втором парметре! Если оставить его на месте то вот какую ошибку ловлю:
{Форма.Форма.Форма(82)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
   Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки,"Query", ИмяВыходногоФайла, Заголовки);
по причине:
Ошибка при выполнении файловой операции  'Query'
по причине:

(17) Да работаю через шлюз, по-другому никак
20 sttt
 
17.05.13
18:04
(18) ну как, с этим (18) работает?
21 artyom_astt
 
17.05.13
18:06
(20) к сожелению ошибка всё таже
22 sttt
 
17.05.13
18:09
уточни у админов параметры прокси.
пример скинул рабочий, правда локально проверенный.
может еще кодировку UTF8 поменять в
POSTПараметры = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.UTF8,, Истина, Символы.ПС); //ТекстБезБОМ
23 artyom_astt
 
17.05.13
18:11
(22) сейчас попробую
24 artyom_astt
 
17.05.13
18:13
(22) а на какую кодировку то менять?? я так понимаю Вы уже реализовали нечто подобное и оно у Вас нормально работает?
25 sttt
 
17.05.13
18:17
да, у меня работает. только я не с этим www.m.blank.bisc.by
этот адрес в браузере не открывается, а через 1с не пытался
26 artyom_astt
 
17.05.13
18:22
хммм, интересно. на адрес в (25) не заходит, но через http://m.blank.bisc.by/ без проблем
27 sttt
 
17.05.13
18:25
(26) так может поменять www.m.blank.bisc.by  везде на m.blank.bisc.by
28 artyom_astt
 
17.05.13
18:27
Вариант синтаксиса: По HTTP-запросу
Синтаксис:
ОтправитьДляОбработки(<HTTPЗапрос>, <ИмяВыходногоФайла>)
Параметры:
<HTTPЗапрос> (обязательный)
Тип: HTTPЗапрос.
HTTP-запрос.
<ИмяВыходногоФайла> (необязательный)

sttt это нормально что в синт.помощнике метод описан по другому??
29 sttt
 
17.05.13
18:33
поменяй адрес http://m.blank.bisc.by/Query и жизнь наладиться и похоже прокси тебе не нужен, проблема была в неверном адресе
у меня так:
ОтправитьДляОбработки(<Источник>, <АдресРесурса>, <ИмяВыходногоФайла>, <Заголовки>)
Параметры:

<Источник> (обязательный)

Тип: Строка.
Имя файла-источника.
<АдресРесурса> (обязательный)

Тип: Строка.
Адрес ресурса на сервере, в который посылаются данные из источника.
<ИмяВыходногоФайла> (обязательный)

Тип: Строка.
Имя выходного файла, в который записываются полученные с сервера данные.
<Заголовки> (необязательный)

Тип: Строка.
Указываются заголовки, добавляемые к запросу на сервер. Текстовые пары вида <Заголовок>:<Значение>, разделяемые комбинацией ВК+ ПС.
Описание:

Отправить ресурс на указанный адрес для обработки.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
30 artyom_astt
 
17.05.13
18:48
Cпасибо за проявляемый интерес, изменил адрес и вот что пишет:
{Форма.Форма.Форма(86)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
   Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки,"Query", ИмяВыходногоФайла, Заголовки);
по причине:
Ошибка работы с Интернет:  Couldn't resolve host name
31 sttt
 
17.05.13
18:50
(30) у тебя где то адрес старый прописан, ищи
32 sttt
 
17.05.13
18:50
+(31) у меня работает
33 artyom_astt
 
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 artyom_astt
 
17.05.13
18:58
(33) не срабатывает, ошибка из (30)
35 sttt
 
17.05.13
19:00
замени везде "http://m.blank.bisc.by" на
   Заголовки.Вставить("Host", "m.blank.bisc.by");    

   Заголовки.Вставить("Referer", "m.blank.bisc.by");

и т.д.
36 sttt
 
17.05.13
19:00
и вот это лишнее:
   ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
   РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
37 artyom_astt
 
18.05.13
11:04
Всё поправил как Вы сказали, но увы получаю ошибку из (30)
38 sttt
 
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 artyom_astt
 
18.05.13
13:25
Спасибо Вам большое, буду разбираться...!
40 artyom_astt
 
18.05.13
22:22
ошибки о которых писал выше отсутствуют, спасибо за это!!!
с куки пока не разобрался увы!
41 sttt
 
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 artyom_astt
 
20.05.13
10:06
С таким методом пока не приходилось сталкиваться, буду пытаться! Спасиб
43 acsent
 
20.05.13
10:15
(41) 1с тоже с куками умеет
44 artyom_astt
 
20.05.13
10:16
(43) может подкинете где почитать, хотелось бы обойтись без ком объектов
45 acsent
 
20.05.13
10:17
HTTPОтвет = Соединение.ОтправитьДляОбработки(Запрос...
далее смотрим HTTPОтвет
46 oleg_km
 
20.05.13
10:42
(45) Это вроде только с 8.1.18?
47 acsent
 
20.05.13
10:43
(46) а че у когото не что ли?
48 artyom_astt
 
20.05.13
11:01
всё норм у меня 8.2
49 artyom_astt
 
20.05.13
11:28
Sttt, есть к Вам вопрос, как к человеку проявившему наибольшее внимание... Для чего мне нужны cookie в моем  случае? может из-за непонимания вопроса у меня ничего и не выходит.....
в принципе если кто сможет пояснить,буду очень признателен
50 artyom_astt
 
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 artyom_astt
 
20.05.13
12:55
до того момента как всё заработает осталось немного, только с куки разобраться...
52 artyom_astt
 
21.05.13
11:39
поднимаю
53 Infsams654
 
21.05.13
11:52
(51) в чем проблемы ? ЗаголовкиЗапроса.Вставить("Cookie", Cookie.Имя + "=" + Cookie.Текст);
54 artyom_astt
 
21.05.13
12:51
(51) c кодом нет проблемы. Не понимаю что есть Cookie.Имя  и  Cookie.Текст, и откуда их брать.
P.S. сорри за жесткий тупняк, с моей стороны
55 artyom_astt
 
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>Общество с ограниченной ответственностью &quot;Успех про&quot;</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>&#169; Расчетный центр НБ РБ</span>
   </div>
</body>
</html>
56 artyom_astt
 
21.05.13
16:47
Кто сталкивался,  обратите внимание, не проходите мимо
(38) код отправки запроса
(55) обработанный запрос (параметры рууками заполнял)
(50) файл полученный с сайта

Как в 1с вместо (50) получить нормальный ответ, который содержится в (55) ??
57 acsent
 
21.05.13
16:49
fiddler поставь и посмотри что передаешь ты, а что браузер
58 artyom_astt
 
21.05.13
17:12
(57) попробую позже, но сейчас нет возможности (нет прав)!!!
вопрос еще актуален
59 Infsams654
 
21.05.13
17:15
(54) на то они и куки, что понимаются клиентом и сервером. Если не знаешь протокола общения, то и не лезь
60 blopp
 
21.05.13
17:33
(56)
Ну типа подумать головой и отработать редирект, не?
61 artyom_astt
 
21.05.13
18:31
Спасибо всем кто попытался помочь, в особенности Sttt !!!!
Всё заработало благодаря тулзе fiddler
62 oleg_km
 
21.05.13
22:10
(61) В следующий раз прямо с нее и начинай