|
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Запрос.УстановитьТелоИзСтроки(Строка, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
|
|