Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как в заголовке POST запроса передать параметр Date?

Как в заголовке POST запроса передать параметр Date?
Я
   vova1122
 
21.11.21 - 21:07
Тестирую POST запрос. Для этого сделал внешнюю обработку. В тексте отправляю некую тестовую информацию и смотрю что мне возвращает 1С.
Все что нужно возвращает верно кроме даты в заголовке (дата возвращается не Текущая, а по Гринвичу)
    
        Сообщение = Новый СообщениеПользователю;
    
    Сервер = "localhost";
    
    Попытка
        
        Соединение = Новый HTTPСоединение(Сервер);
        
    Исключение
        Сообщение.Текст = ОписаниеОшибки();
        Сообщение.Сообщить();
        Возврат;
    КонецПопытки;
    
    АдресРесурса = "/test/hs/test/";
    Заголовки = Новый Соответствие;
    
    Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");
    
    HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
    
    СтрокаНоменклатураJSON = ПолучитьJSONСтрокуНоменклатуры();
    
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаНоменклатураJSON,"UTF-8");
    
    Попытка
        //ОТПРАВЛЯЕМ ДАННЫЕ НА СЕРВЕР
        Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
        
    Исключение
        Сообщение.Текст = ОписаниеОшибки();
        Сообщение.Сообщить();
        Возврат;
    КонецПопытки;
    Сообщить(Ответ.ПолучитьТелоКакСтроку());
    Сообщить(Ответ.КодСостояния);
    Соотв=Ответ.Заголовки;
    Для Каждого Элемент Из Соотв Цикл
        // тут проверяю что мне вернулось в заголовках
        Сообщить(Строка(Элемент.Ключ) + " ------ " + Элемент.Значение);
    КонецЦикла;


//======================================================================================================================
//тут в HTTPсервисах пишу код POST запроса

    Структура = Новый Структура;
    Структура.Вставить("tekstvozvrata",ТекстВозврата);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Структура);
    Результат=ЗаписьJSON.Закрыть();        
    
    ДатаВозврат=XMLСтрока(ТекущаяДата()+750);
    //ДатаВозврат=ТекущаяДата();
    //ДатаВозврат=КодироватьСтроку(XMLСтрока(ТекущаяДата()+1120),СпособКодированияСтроки.КодировкаURL);
    // пробовал разные варианты которые удалось найти
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type","application/json; charset=utf-8");
    Заголовки.Вставить("Date",ДатаВозврат);  // вставил дату в заголовок
    
    
    Ответ = Новый HTTPСервисОтвет(200,,Заголовки);
    
    Ответ.УстановитьТелоИзСтроки(Результат);
    Возврат Ответ;



Но дата в любом случае получается не Текущая, а со смещением (в смысле дата возвращается по Гринвичу. Тоисть моя дата игнорируется)
Может кто подскажит как передать эту дату в заголовке post запроса?
   vova1122
 
1 - 21.11.21 - 21:14
Такое ощущение что параметер Дата в заголовке вообще игнорируется
   Ёпрст
 
2 - 21.11.21 - 21:14
(0)
МестноеВремя(<УниверсальноеВремя>, <ЧасовойПояс>)
   vova1122
 
3 - 21.11.21 - 21:15
(2) куда это влепить?
   Ёпрст
 
4 - 21.11.21 - 21:15
(3) там где нужна дата в местном времени
   acht
 
5 - 21.11.21 - 21:18
(0) > ДатаВозврат=XMLСтрока(ТекущаяДата()+750); 
...
> дата в любом случае получается не Текущая, а со смещением

Да неужели?
   acht
 
6 - 21.11.21 - 21:21
А если ты внимательно посмотришь на строку даты, то увидишь там в конце свой часовой пояс.
   vova1122
 
7 - 21.11.21 - 21:23
Вот так возвращает
Date ------ Sun, 21 Nov 2021 18:21:51 GMT
Server ------ Apache/2.4.34 (Win32)
Content-Length ------ 51
Content-Type ------ application/json; charset=utf-8
   acht
 
8 - 21.11.21 - 21:25
(7) >  Sun, 21 Nov 2021 18:21:51 GMT
Это у тебя результат вызова XMLСтрока такой? Ну-ну.
   vova1122
 
9 - 21.11.21 - 21:28
(8) Это возврат от Сервера
      Соотв=Ответ.Заголовки;
    Для Каждого Элемент Из Соотв Цикл
        // тут проверяю что мне вернулось в заголовках

        Сообщить(Строка(Элемент.Ключ) + " ------ " + Элемент.Значение);
    КонецЦикла;
   Ёпрст
 
10 - 21.11.21 - 21:32
(7) ответ в json-е приходит ?
   vova1122
 
11 - 21.11.21 - 21:32
Проверил XMLСтрока(ТекущаяДата()+750);  возвращает правильную дату (Текущая (местная) плюс моя добавка)
   vova1122
 
12 - 21.11.21 - 21:33
(10) Нет. это какраз заголовки
   vova1122
 
13 - 21.11.21 - 21:33
+(10) а тело , да в Джейсоне
   acht
 
14 - 21.11.21 - 21:34
(9) А это потому, что сервер срать хотел на твой заголовок со служебным именем Date и всегда перебивает его своим с нужным ему значением.

https://datatracker.ietf.org/doc/html/rfc7231#section-7.1.1.2

"the sender SHOULD generate its field value as the best available approximation of the date and time of message generation."
   acht
 
15 - 21.11.21 - 21:36
... An origin server MAY send a Date header field if the response is in the 1xx (Informational) or 5xx (Server Error) class of status codes.  An origin server MUST send a Date header field in all other cases.
   acht
 
16 - 21.11.21 - 21:38
   vova1122
 
17 - 21.11.21 - 21:38
(15) Так я ему писал ТекущаяДата() Всеравно игнорирует
   vova1122
 
18 - 21.11.21 - 21:39
(16) так получается дату в заголовке не передать?
   acht
 
19 - 21.11.21 - 21:40
(17) Еще раз. Заголовок с именем "Date" является служебным. Поэтому Apache выбрасывает наъ все что ты туда пытаешся засунуть и ставит, согласно стандарту, время создания сообщения в нужном формате.
   acht
 
20 - 21.11.21 - 21:40
(18) В заголовке с другим именем - запросто
   vova1122
 
21 - 21.11.21 - 21:42
(20) вот же "редиска", а я целый день потратил на эту муть
   vova1122
 
22 - 21.11.21 - 22:29
еще нашел такой совет что нужно поменять в файле php.ini часовой пояс.

Пример:
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Berlin

У меня на сервере эта строка пустая и закоментироваана
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =

А на тестовом компе где я тестирую этого файла вообще нет. На сервере и на тестовом компе дату возвращает неверную.
Рискнуть поменять на сервере этот параметр? или могут быть проблемы?
   Сергиус
 
23 - 21.11.21 - 22:47
(0)Вопрос, а собственно для чего тебе нужен этот заголовок?
   vova1122
 
24 - 21.11.21 - 22:52
(23) принимающая сторона (сервер онлайн платежей) требует в заголовке передавать текущую дату
   eklmn
 
25 - 22.11.21 - 09:46
(24) и у тебя сервер, конечно же настроен, как у них, все параметры те же?
тестируй у них на сервере, попроси пример
   acht
 
26 - 22.11.21 - 10:02
(24) Чем не устраивает дата, которую передает apache?
   Сергиус
 
27 - 22.11.21 - 10:06
(24)[дата возвращается не Текущая, а по Гринвичу]

Судя по тому, что ты пишешь, какая то дата точно есть. Почему ты решил, что проблема именно в этом?
   acht
 
28 - 22.11.21 - 10:13
(24) FYI: https://datatracker.ietf.org/doc/html/rfc2616#section-3.3.1

All HTTP date/time stamps MUST be represented in Greenwich Mean Time (GMT), without exception.
   eklmn
 
29 - 22.11.21 - 10:17
(26)(27) он в принципе не с той стороны смотрит на вопрос
   vova1122
 
30 - 22.11.21 - 11:09
У них есть страница для теста запросов
Вот что она возвращает

Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Length: 62
Content-Type: text/json; charset=utf-8
Date: Mon, 22 Nov 2021 08:05:49 GMT
Server: Apache/2.4.34 (Win32)

И отдельно красным пишет
Data at the root level is invalid. Line 1, position 1.
 
 
   acht
 
31 - 22.11.21 - 11:11
(30) "Data" - это "данные", а не "дата", турист.
   acht
 
32 - 22.11.21 - 11:11
У тебя тело запроса кривое
   vova1122
 
33 - 22.11.21 - 11:12
(32) Спасибо, а то я Читаю Data и понимаю  Дата
   acht
 
34 - 22.11.21 - 11:15
(33) Удачи тебе и семь футов под килем


Список тем форума
 
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.