Имя: Пароль:
1C
1С v8
1С и POST запрос - (символ точки в начале пакета)
0 Olelykoye
 
29.10.14
10:00
Добрый день. Есть запрос на простую страницу php.

Соединение = Новый HTTPСоединение("192.168.11.185","80");
    Заголовки = Новый Соответствие;
    СтрокаОтправки = "AAAAA=BBBBB"+Символы.ПС;
    Заголовки.Вставить("Content-Length",СтрДлина(СтрокаОтправки));
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");

    Запрос = Новый HTTPЗапрос("/script/test.php",Заголовки);
    Запрос.УстановитьТелоИзСтроки(СтрокаОтправки);
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Возникает ошибка :
{Форма.Форма1.Форма(15)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
по причине:
Ошибка работы с Интернет:  Server returned nothing (no headers, no data)

Если изменить строку
Заголовки.Вставить("Content-Length",СтрДлина(СтрокаОтправки)+2);
Пакет уходит, но страница сообщает что пришли данные:
".AAAAA=BBBBB" хотя точки нет в коде.

WireShark - следующий пакет
POST /script/test.php HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: 192.168.11.185
Accept: */*
Content-Length: 14
Content-Type: application/x-www-form-urlencoded

...AAAAA=BBBBB
HTTP/1.1 200 OK
Date: Wed, 29 Oct 2014 06:57:00 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.4
Content-Length: 0
Content-Type: text/html; charset=UTF-8

Видно что 1С шлет данные с ...

Что не так? Или нельзя отправлять данные таким методом, нужно в любом случае отправлять через файл а файл на сервере получать и разбирать.
1 yukon
 
29.10.14
10:41
(0) Все штатно: если кодировка UTF-8, то в начале контента *принудительно* записывается BOM
2 oleg_km
 
29.10.14
10:53
(1) Странно, он тело вроде записывает из строки. Это при записи в файл записывается BOM. Какое шестнадцатеричное представление этой точки?
3 Olelykoye
 
29.10.14
10:56
Действительно, указав кодировку к примеру "windows-1251", скрипт принял без проблем запрос. Спасибо.
4 Olelykoye
 
29.10.14
11:03
И еще, может кому то понадобится - получить ответ от скрипта, достаточно прописать в скрипте обычное "echo 'Текст'", а на стороне 1С  - что бы получить строчку - следующее

..Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());

второй строчкой и будет ответ от скрипта. Еще раз спасибо.
5 yukon
 
29.10.14
11:07
(2) Это известная проблема, как минимум, с июня прошлого года. В ближайших релизах 8.3 обещались исправить.
6 yukon
 
29.10.14
11:13
Нашел: http://v8.1c.ru/o7/201410json/index.htm

HTTPЗапрос.УстановитьТелоИзСтроки(Строка, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
Основная теорема систематики: Новые системы плодят новые проблемы.