Имя: Пароль:
1C
1С v8
Не обрабатывается POST запрос посланный из 1С
0 vudo
 
14.06.14
12:51
Уже весь ум сломал. php упорно не видит параметры POST запроса созданного из 1С...

Вот текст запроса 1С:

    ИмяВыходногоФайла = ПолучитьИмяВременногоФайла();
    ИмяПользователя = Константы.ВТ_ИмяПользователя.Получить();
    Прокси = Новый ИнтернетПрокси;
    Соединение = Новый HTTPСоединение(Константы.ВТ_АдресСервера.Получить(), Константы.ВТ_ПортСервера.Получить(),,,Прокси);
    
    
    
    СгенерированныйКлюч = "";
    ИмяПостФайла = ПолучитьИмяВременногоФайла();
    
    Заголовки = Новый Соответствие();
    
    АдресЗапросаПост = "webservice.php";
    ЗапросНаОтправку = Новый HTTPЗапрос(АдресЗапросаПост, Заголовки);
    ЗапросНаОтправку.УстановитьТелоИзСтроки("username=" + ИмяПользователя);
    
    Попытка    
        Ответ = Соединение.ОтправитьДляОбработки(ЗапросНаОтправку);
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    Сообщить(Ответ.ПолучитьТелоКакСтроку());

Вот код php:

echo 'Hello '. $_POST["username"];
foreach ($_POST as $key => $value){
  echo "{$key} = {$value}\r\n";
  }

Возвращается просто Hello

Подобный вызов из браузера отрабатывает нормально.

Что не так? Выжег все мозги. Уже игрался и с разными заголовками - ничего не помогает!

Помогите кто-нибудь!
1 vudo
 
14.06.14
13:16
А что это за символы 1Ска лепит перед телом запроса:
EF BB FF

Может из-за этого?
2 ramir
 
14.06.14
13:19
&НаСервере
Функция ОтправитьЗапросPOST(АдресСайта, АдресРесурса, Параметры) Экспорт
    ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла();
    
    ФайлОтправки = Новый ТекстовыйДокумент;
    ФайлОтправки.УстановитьТипФайла(КодировкаТекста.UTF8);
    
    Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()),"-","");
    
    Для Каждого Параметр Из Параметры Цикл
        ФайлОтправки.ДобавитьСтроку("--" + Boundary);
        ФайлОтправки.ДобавитьСтроку("Content-Disposition: form-data; name=""" + Параметр.Ключ + """" + Символы.ПС);
        ФайлОтправки.ДобавитьСтроку(Параметр.Значение);
        ФайлОтправки.ДобавитьСтроку("--" + Boundary);
    КонецЦикла;
    
    ФайлОтправки.Записать(ИмяФайлаЗапроса, КодировкаТекста.UTF8);
    
    ФайлОтправки = Новый Файл(ИмяФайлаЗапроса);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("POST /token HTTP/1.0");
    ЗаголовокHTTP.Вставить("Host", АдресСайта);
    ЗаголовокHTTP.Вставить("Content-Type","multipart/form-data; boundary=" + Boundary);
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
    
    // устанавливаем соединение с сервером
    Попытка
        Соединение = Новый HTTPСоединение(АдресСайта);
        //Сообщить(АдресСайта);
        //Сообщить(АдресРесурса);
    Исключение
        Сообщить("Не удалось установить соединение:"
        + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
        Возврат Неопределено;
    КонецПопытки;
    
    // посылаем запрос
    ФайлРезультата = ПолучитьИмяВременногоФайла();
    Попытка
        Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, АдресРесурса, ФайлРезультата, ЗаголовокHTTP);
        Соединение = Неопределено;
    Исключение
        Сообщить(ОписаниеОшибки());
        Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
        Возврат Неопределено;
    КонецПопытки;
    
    Чтение = Новый ЧтениеТекста(ФайлРезультата);
    Результат = Чтение.Прочитать();    
    Чтение.Закрыть();
    
    Возврат Результат;
КонецФункции
3 vudo
 
14.06.14
13:22
Так с этими символами разобрался.
UTF-8 без BOM  и UTF-8
Это просто символы BOM
4 vudo
 
14.06.14
13:47
(2) Всё тоже...
5 oleg_km
 
14.06.14
13:49
Фиддлер что говорит?
6 vudo
 
14.06.14
13:58
(5) Тоже все отправка с символами BOM

--22d7d49b2af142ae895846dffa74d4b1
Content-Disposition: form-data; name="name"

admin
--22d7d49b2af142ae895846dffa74d4b1

Насколько я понимаю, это текст не правильный

Должно быть
username=admin
7 vudo
 
14.06.14
14:29
Добился отправки без символов BOM, но толку никакого...
8 vudo
 
14.06.14
15:02
Выжег мозга! Вот чего не хватало в посте (0):

    Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");  
    Заголовки.Вставить("cache-control", "max-age=0");
    Заголовки.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    Заголовки.Вставить("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
    Заголовки.Вставить("Accept-Encoding", "gzip,deflate,sdch");
    Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36");


Основное:

    Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");  

Получилось... Тема закрыта.
Программист всегда исправляет последнюю ошибку.