Имя: Пароль:
1C
1С v8
Передача методом POST
, ,
0 tatarinovaola
 
27.09.13
10:45
Добрый день. Вопрос поднимался, наверное, уже, но прочитав форумы не смогла определить ошибку.
Гуру, подскажите что не так?
Следующая ошибка на строке ОтправитьДляОбработки.

Ошибка работы с Интернет:  Couldn't resolve host name

Функция ОтправитьАвисиоСМС(НомерТелефона, Текст)  Экспорт
    УспешнаяОтправка = Ложь;
    
    НастройкиСервиса = ПолучитьНастройкиСервиса(Перечисления.СМС_Сервисы.АвисиоСМС);
    Если НастройкиСервиса = Неопределено Тогда
        ЗаписьЖурналаРегистрации("Отправить Ависио СМС", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка настройки сервера: " + ОписаниеОшибки());   //kaso
        Возврат УспешнаяОтправка;
    КонецЕсли;
имяФайлаОтправки = ПолучитьимяВременногоФайла("xml");

ОбъектXML = Новый ЗаписьXML;
ОбъектXML.ОткрытьФайл(имяФайлаОтправки, "UTF-8");
ОбъектXML.ЗаписатьОбъявлениеXML();
ОбъектXML.ЗаписатьБезОбработки(
"<date>
|    <login" + НастройкиСервиса.Пользователь + "</login>
|    <password>" + НастройкиСервиса.Пароль + "</password>
|    <text>" + Текст + "</text>
|    <to number='" + НомерТелефона + "'></to>
|</date>");
ОбъектXML.Закрыть();
имяВыходногоФайла = ПолучитьимяВременногоФайла("xml");
ФайлОтправки = Новый Файл(имяФайлаОтправки);
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "text/html;charset=utf-8");
АдресСервераОнлайнПроверки  = "http://smsservice.itakazan.ru/Service/XMLService.asmx/Send";;
Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки);
Соединение.ОтправитьДляОбработки(имяФайлаОтправки, "Send", имяВыходногоФайла, Заголовки);
Попытка
    УдалитьФайлы(имяФайлаОтправки);
Исключение
КонецПопытки;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(имяВыходногоФайла);
Пока ЧтениеXML.Прочитать() Цикл
    // чтение ответа в виде XML файла
    //...
КонецЦикла;
ЧтениеXML.Закрыть();
Попытка
    УдалитьФайлы(имяВыходногоФайла);
Исключение
КонецПопытки;
1 viktor_vv
 
27.09.13
10:49
Несколько странный адрес
""http://smsservice.itakazan.ru/Service/XMLService.asmx/Send""; target="_blank" rel="nofollow" class="extralink">http://smsservice.itakazan.ru/Service/XMLService.asmx/Send";;;

а если оставить только

"http://smsservice.itakazan.ru/Service/XMLService.asmx/Send";
2 oleg_km
 
27.09.13
10:54
АдресСервера это только вот эта часть: smsservice.itakazan.ru

Должно быть примерно так:
АдресСервераОнлайнПроверки  = "smsservice.itakazan.ru";
Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки);
Соединение.ОтправитьДляОбработки(имяФайлаОтправки, "Service/XMLService.asmx/Send", имяВыходногоФайла, Заголовки);
3 tatarinovaola
 
27.09.13
10:56
Исправила следующее:
АдресСервераОнлайнПроверки  = "http://www.smsservice.itakazan.ru";;
Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки);
Соединение.ОтправитьДляОбработки(имяФайлаОтправки, "/Service/XMLService.asmx/Send", имяВыходногоФайла, Заголовки);

Ошибки теперь не выдал, но и смс-ка не пришла.
4 tatarinovaola
 
27.09.13
10:57
Непонятно вставляется адрес((( Сделала, как написа oleg_km
5 viktor_vv
 
27.09.13
11:08
Теперь еще бы ответ сервера посмотерть в ВыходномФайле.
6 oleg_km
 
27.09.13
11:17
(4) Что именно непонятно? Адрес, это адрес хоста и в вашем случае - это только smsservice.itakazan.ru. Хотите дальше упорствовать - дело ваше
7 tatarinovaola
 
27.09.13
11:34
Я не упорствую, я так и сделала, как вы сказали, просто при вставке сюда на форум, строчка так вставляется почему-то
8 goleaff2006
 
27.09.13
11:42
без фото не помогут =)
9 Asmody
 
27.09.13
11:45
Парсер форума портит ссылки в коде 1С. Это нормально.
10 Asmody
 
27.09.13
11:47
(3) http:// в адресе сервера не нужно
11 tatarinovaola
 
27.09.13
11:59
http:// убрала, спасибо
12 tatarinovaola
 
27.09.13
12:39
Файл отправился, всем спасибо, но возврат - ошибка парсера.
Подскажите, я не правильно структуру передала?
Нужно отправить вот в таком формате:
<data>
<login>LOGIN</login>
<password>PASSWORD</password>
<action>ACTION</action>
<text>TEXT</text>
<to number='NUMBER'></to>
</data>
13 viktor_vv
 
27.09.13
12:46
|    <login" + НастройкиСервиса.Пользователь + "</login>


Так наверное

|    <login>" + НастройкиСервиса.Пользователь + "</login>
14 tatarinovaola
 
27.09.13
12:59
(13) не поняла))
15 viktor_vv
 
27.09.13
13:07
(14) Найди одно отличие в нижней строке по сравнению с верхней. Посимвольно слева направо.
16 viktor_vv
 
27.09.13
13:08
(15)+ Так можнт понятнее будет

|    <login" + НастройкиСервиса.Пользователь + "</login>
|    <login>" + НастройкиСервиса.Пользователь + "</login>
17 viktor_vv
 
27.09.13
13:10
И посмотри как у тебя эта строка в (0) написана.
18 tatarinovaola
 
27.09.13
14:27
Извините, сразу не увидела разницы. Исправила.
Текст результирующего файла выглядит так:
<?xml version="1.0" encoding="UTF-8"?><date>
    <login>польз</login>
    <password>пароль</password>
    <text>Текст</text>
    <to number='НомерТелефона'></to>
</date>
19 tatarinovaola
 
27.09.13
14:32
<date> не могу перенести в нужное место(
20 viktor_vv
 
27.09.13
15:00
(19) А теперь определись тебе надо datE или DatA.

В примере (12) у тебя datA.
21 viktor_vv
 
27.09.13
15:03
(19) Переносить не надо, можешь хоть в одной строке все писать, главное правильно.
Если сильно хочется, то так

"|<date>
|    <login" + НастройкиСервиса.Пользователь + "</login>
22 tatarinovaola
 
27.09.13
15:07
Спасибо вам огромное!!!! Это все моя невниматеьность! Спасибо!
23 tatarinovaola
 
27.09.13
15:07
Действительно нужно Data
24 oleg_km
 
27.09.13
15:53
Тогда и закрывающий тэг должен быть </datA>
25 tatarinovaola
 
27.09.13
16:30
Да, конечно
26 tatarinovaola
 
30.09.13
09:31
Добрый день. Спасибо всем за помощь, еще вопрос возник: сервер возвращает ошибку  - Ошибка парсера XML документа. Можете подсказать, с чем это может быть связао?
27 oleg_km
 
30.09.13
10:10
Еще раз сбрось сюда свй xml, только в отладчике скопипасть, что бы было полностью идентично
28 oleg_km
 
30.09.13
10:12
ОбъектXML.ОткрытьФайл(имяФайлаОтправки, "UTF-8");

Там наверное опять BOM записывается, а сервер естественно его не воспринимает
29 tatarinovaola
 
30.09.13
10:17
<?xml version="1.0" encoding="UTF-8"?><data>
    <login>польз</login>
    <password>пароль</password>
    <text>Текст</text>
    <to number='НомерТелефона'></to>
</data>
30 tatarinovaola
 
30.09.13
10:21
имяФайлаОтправки = ПолучитьимяВременногоФайла("xml");
    ОбъектXML = Новый ЗаписьXML;
    ОбъектXML.ОткрытьФайл(имяФайлаОтправки, "UTF-8");
    ОбъектXML.ЗаписатьОбъявлениеXML();
    /// для запроса баланса текст
    //ОбъектXML.ЗаписатьБезОбработки(
    //"<data>
    //|    <login>" + НастройкиСервиса.Пользователь + "</login>
    //|    <password>" + НастройкиСервиса.Пароль + "</password>
    //|</data>");
    /////
    ОбъектXML.ЗаписатьБезОбработки(
    "<data>
    |    <login>" + НастройкиСервиса.Пользователь + "</login>
    |    <password>" + НастройкиСервиса.Пароль + "</password>
    |    <text>" + Текст + "</text>
    |    <to number='" + НомерТелефона + "'></to>
    |</data>");
    ////
    ОбъектXML.Закрыть();
    имяВыходногоФайла = ПолучитьимяВременногоФайла("xml");
    ФайлОтправки = Новый Файл(имяФайлаОтправки);
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("Content-Type", "text/html;charset=utf-8");
    АдресСервераОнлайнПроверки  = "http://www.smsservice.itakazan.ru";;
    Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки);
    // для запроса баланса текст
    //Соединение.ОтправитьДляОбработки(имяФайлаОтправки, "/Service/XMLService.asmx/Balance", имяВыходногоФайла, Заголовки);
    //
    Соединение.ОтправитьДляОбработки(имяФайлаОтправки, "/Service/XMLService.asmx/Send", имяВыходногоФайла, Заголовки);
    //
    Попытка
        УдалитьФайлы(имяФайлаОтправки);
    Исключение
    КонецПопытки;
31 viktor_vv
 
30.09.13
10:22
(29) Закомментируй это

Попытка
    УдалитьФайлы(имяФайлаОтправки);
Исключение
КонецПопытки;


и посмотри что у тебя в файле отправки.
32 oleg_km
 
30.09.13
10:27
(29) Я просто сохранил фрагмент в файл xml, а он мне уже ругается:

Не удается отобразить страницу XML
Не удается просмотреть ввод XML с использованием списка стилей XSL. Исправьте ошибку и затем нажмите кнопку "Обновить"или повторите попытку позднее.


--------------------------------------------------------------------------------

В текстовом комментарии обнаружен недопустимый знак. Ошибка при обработке ресурса ''file:///C:/Temp/1С/Проги/test.xml''. С...

    <login>


Короче, сделай как написали в (31) и попробуй открыть xml файл в експлорере.
33 tatarinovaola
 
30.09.13
10:33
<?xml version="1.0" encoding="UTF-8" ?>
- <data>
  <login>польз</login>
  <password>пароль</password>
  <text>Текст</text>
  <to number="НомерТелефона" />
  </data>

В експлорере выглядит так
34 tatarinovaola
 
30.09.13
10:35
Причем сначала ругался на логин/пароль. Нашли ошибку в пароле и начал выдавать вот эту ошибку парсера. Значит xml читается.
35 viktor_vv
 
30.09.13
10:39
- <data>

а че это за фигня перед <data> ?
36 viktor_vv
 
30.09.13
10:42
(33) Открой блокнотом как обычный текст.
37 tatarinovaola
 
30.09.13
10:44
вот так выглядит строчка с data в блокноте:
<?xml version="1.0" encoding="UTF-8"?><data>
откуда - ?
38 viktor_vv
 
30.09.13
10:46
(33) Это он у тебя русские буквы не понимает. Если в (33) заменить кирилицу на англ, то не ругается при открытии

<?xml version="1.0" encoding="UTF-8" ?>
<data>
  <login>abcd</login>
  <password>abcd</password>
  <text>abcd</text>
  <to number="1234" />
  </data>
39 oleg_km
 
30.09.13
10:46
(35) Ну это значит, что експлорер нормально парсит, нужно посмотреть в шестнадцатеричном виде
40 tatarinovaola
 
30.09.13
10:49
(38) Логи и пароль на английском, а вот текст тоже не может быть разве на кириллице.
41 viktor_vv
 
30.09.13
10:50
(40) (38) Это не читать. Это я не в utf сохранил файл. Если в utf, то нормально открывается.
42 viktor_vv
 
30.09.13
10:51
(41)+ с кирилицей.
43 oleg_km
 
30.09.13
10:52
(40) можно, я просто сохранил файл без первой строчки, а там кодировка указана. Попробуй выложить шестнадцатеричное представление файла, хотя бы первые 16 байт
44 viktor_vv
 
30.09.13
10:53
(33) Тьфу ты. Сравни (12) и свою строку

<to number='NUMBER'></to>
<to number="НомерТелефона" />
45 viktor_vv
 
30.09.13
10:54
(44)+ Окончание строки.
46 oleg_km
 
30.09.13
10:58
(45) Эксплорер же в (33) парсит
47 viktor_vv
 
30.09.13
11:01
(46) Это не факт xml-парсер это разберет. ИМХО.
Лучше таки исправить дабы исключить из возможной причины ошибки.
48 tatarinovaola
 
30.09.13
11:01
ОбъектXML.ЗаписатьБезОбработки(
    "<data>
    |    <login>" + НастройкиСервиса.Пользователь + "</login>
    |    <password>" + НастройкиСервиса.Пароль + "</password>
    |    <text>" + Текст + "</text>
    |    <to number='" + НомерТелефона + "'></to>
    |</data>");
Изначально я так и пишу.
В блокноте строчка выглядит так:
<to number='1'></to>
49 viktor_vv
 
30.09.13
11:05
(48) Да. Так и есть. Сорри. Тогда не знаю.
50 oleg_km
 
30.09.13
11:06
(48) Блокнот не при чем. Нужно открыть файл xml шестнадцатеричным просмотрщиком и выложить первые 16 байт файла.
51 tatarinovaola
 
30.09.13
11:25
(50) можете ссылку на скачку дать на просмотрщика?
52 oleg_km
 
30.09.13
11:28
(51) Я пользуюсь встроенным в Тотал Коммандер. Проще тебе прислать мне файл, хотя на будущее, если занимаешься электронным обменом, лучше подобрать себе просмотрщик. [email protected]
53 Зойч
 
30.09.13
11:29
(51) с бом'ом  уже разобралась?
54 oleg_km
 
30.09.13
11:45
(53) Да вот пытаемся.

(51) А сервер примет xml в другой кодировке, допустим win-1251? Тогда просто нужно поменять:

ОбъектXML.ОткрытьФайл(имяФайлаОтправки, "win-1251");

И все должно заработать
55 oleg_km
 
30.09.13
11:46
(53) Кстати, а как ты BOM выкидываешь? Я пользуюсь ADOStream, несколько громоздко получается
56 tatarinovaola
 
30.09.13
11:48
(52) отправила вам файл
57 tatarinovaola
 
30.09.13
11:49
в тех поддержке сказали добавить параметр send, я  добавила
58 oleg_km
 
30.09.13
11:59
(56) Да получил, попробую объяснить:

1) Вы формируете xml в кодировке utf-8
2) Для файлов с такой кодировкой предусмотрено добавление в начало файл специальной сигнатуры EF BB BF: п»ї<?xml version. Для всех программ, работающих с utf наличие этой сигнатуры подсказывает, что файл utf, и дальше программа отбрасывает эти символы, поэтому ты их не видишь в блокноте, но они видны в просмотрщике.
3) 1С функция ОтправитьДляОбработки не знает, что тебе нужно отправить utf данные, для нее файл: это просто набор байтов, позтому она шлет все подряд, включая и ненужную серверу сигнатуру.
4) А сервер вообще просто принимает строку, он не предполагает, что ты будешь посылать ему файл

Что делать?
Либо отослать xml в другой кодировке, которая не добавляет в файлы никаких сигнатур, например win-1251, если сервер может принять данные в такой кодировке
Либо отрезать из полученного файла сигнатуру перед отправкой

У меня есть такая процедура, но она очень громоздкая, может кто предложит что попроще. Создай новый топик с вопросом: Как удалить BOM из файла?
59 oleg_km
 
30.09.13
12:00
Попробуй просто пока поменять кодировку, может прокатит.
60 tatarinovaola
 
30.09.13
12:50
Посоветовали соединение сделать защищенным.
Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки,,,,Истина); Так правильно?
Смена кодировки не помогла((
61 tatarinovaola
 
30.09.13
12:52
(58) Спасибо вам большое за такое понятное объяснение.
62 tatarinovaola
 
30.09.13
13:06
Еще раз всех благодарю за помощь. Ошибка на самом деле была очень глупая, дело не в кодировке. В нашем пароле содержалась решетка, сменили пароль и все заработало!!!! Спасибо!
63 oleg_km
 
30.09.13
14:03
Т.е. даже BOM съел? Понятно.
64 tatarinovaola
 
30.09.13
14:06
(63) да
65 viktor_vv
 
30.09.13
14:18
(62) :). У вас наверное параноики пароли придумывают :)).
66 tatarinovaola
 
30.09.13
14:20
Люди, борющиеся за сложные пароли:) (65)
67 oleg_km
 
30.09.13
14:28
Ну у систем, доступных в Интернет по определению должны быть сложные пароли. Ведь в руках злоумышленника практически неограниченная сеть ботов, могущих перебирать пароли круглые сутки
68 viktor_vv
 
30.09.13
14:40
(67) Да я не спорю, но решетку в пароль, имхо, перебор.
69 Зойч
 
30.09.13
14:43
КАК удалить бом из файла:
Создать пустой файл 1251. Записывать в утф в файл с ключем добавлять
70 oleg_km
 
30.09.13
14:48
(69) оригинально