|
Как в заголовке POST запроса передать параметр Date? | ☑ | ||
---|---|---|---|---|
0
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 запроса? |
|||
1
vova1122
21.11.21
✎
21:14
|
Такое ощущение что параметер Дата в заголовке вообще игнорируется
|
|||
2
Ёпрст
21.11.21
✎
21:14
|
(0)
МестноеВремя(<УниверсальноеВремя>, <ЧасовойПояс>) |
|||
3
vova1122
21.11.21
✎
21:15
|
(2) куда это влепить?
|
|||
4
Ёпрст
21.11.21
✎
21:15
|
(3) там где нужна дата в местном времени
|
|||
5
acht
21.11.21
✎
21:18
|
(0) > ДатаВозврат=XMLСтрока(ТекущаяДата()+750);
... > дата в любом случае получается не Текущая, а со смещением Да неужели? |
|||
6
acht
21.11.21
✎
21:21
|
А если ты внимательно посмотришь на строку даты, то увидишь там в конце свой часовой пояс.
|
|||
7
vova1122
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 |
|||
8
acht
21.11.21
✎
21:25
|
(7) > Sun, 21 Nov 2021 18:21:51 GMT
Это у тебя результат вызова XMLСтрока такой? Ну-ну. |
|||
9
vova1122
21.11.21
✎
21:28
|
(8) Это возврат от Сервера
Соотв=Ответ.Заголовки; Для Каждого Элемент Из Соотв Цикл // тут проверяю что мне вернулось в заголовках Сообщить(Строка(Элемент.Ключ) + " ------ " + Элемент.Значение); КонецЦикла; |
|||
10
Ёпрст
21.11.21
✎
21:32
|
(7) ответ в json-е приходит ?
|
|||
11
vova1122
21.11.21
✎
21:32
|
Проверил XMLСтрока(ТекущаяДата()+750); возвращает правильную дату (Текущая (местная) плюс моя добавка)
|
|||
12
vova1122
21.11.21
✎
21:33
|
(10) Нет. это какраз заголовки
|
|||
13
vova1122
21.11.21
✎
21:33
|
+(10) а тело , да в Джейсоне
|
|||
14
acht
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." |
|||
15
acht
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.
|
|||
16
acht
21.11.21
✎
21:38
|
||||
17
vova1122
21.11.21
✎
21:38
|
(15) Так я ему писал ТекущаяДата() Всеравно игнорирует
|
|||
18
vova1122
21.11.21
✎
21:39
|
(16) так получается дату в заголовке не передать?
|
|||
19
acht
21.11.21
✎
21:40
|
(17) Еще раз. Заголовок с именем "Date" является служебным. Поэтому Apache выбрасывает наъ все что ты туда пытаешся засунуть и ставит, согласно стандарту, время создания сообщения в нужном формате.
|
|||
20
acht
21.11.21
✎
21:40
|
(18) В заголовке с другим именем - запросто
|
|||
21
vova1122
21.11.21
✎
21:42
|
(20) вот же "редиска", а я целый день потратил на эту муть
|
|||
22
vova1122
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)Вопрос, а собственно для чего тебе нужен этот заголовок?
|
|||
24
vova1122
21.11.21
✎
22:52
|
(23) принимающая сторона (сервер онлайн платежей) требует в заголовке передавать текущую дату
|
|||
25
eklmn
гуру
22.11.21
✎
09:46
|
(24) и у тебя сервер, конечно же настроен, как у них, все параметры те же?
тестируй у них на сервере, попроси пример |
|||
26
acht
22.11.21
✎
10:02
|
(24) Чем не устраивает дата, которую передает apache?
|
|||
27
Сергиус
22.11.21
✎
10:06
|
(24)[дата возвращается не Текущая, а по Гринвичу]
Судя по тому, что ты пишешь, какая то дата точно есть. Почему ты решил, что проблема именно в этом? |
|||
28
acht
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. |
|||
29
eklmn
гуру
22.11.21
✎
10:17
|
(26)(27) он в принципе не с той стороны смотрит на вопрос
|
|||
30
vova1122
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. |
|||
31
acht
22.11.21
✎
11:11
|
(30) "Data" - это "данные", а не "дата", турист.
|
|||
32
acht
22.11.21
✎
11:11
|
У тебя тело запроса кривое
|
|||
33
vova1122
22.11.21
✎
11:12
|
(32) Спасибо, а то я Читаю Data и понимаю Дата
|
|||
34
acht
22.11.21
✎
11:15
|
(33) Удачи тебе и семь футов под килем
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |