Как вычислить поле Content-Length заголовка POST запроса?
Сабж. Как это делается? Это длина в символах отправляемого json массива или что? Пишу парсер на питоне, пытаюсь выцепить AJAX запрос, а просто так он не работает. Посмотрел все отсылаемые заголовки, выставляю так же, но все равно ошибка 400. URL правильный, но вот не знаю как вычислить Content-Length

Qwentor ★★★★★
19.05.16 13:09:44 MSK

Это длина в символах отправляемого json массива или что?
Это длина тела запроса в байтах.
i-rinat ★★★★★
( 19.05.16 13:10:41 MSK )
А разве в таких случаях не проще юзать curl, который все это посчитает сам и умеет еще много чего другого?
xtraeft ★★☆☆
( 19.05.16 13:15:09 MSK )

>>> s = "Привет, Qwentor" >>> len(s) 15 >>> len(s.encode('utf-8')) 21
Как сказано выше, это Content-Length — длинна строки в байтах, при этом стоит учитывать, что в питоне ваше тело сообщения, будучи строкой, кодируется в юникоде.
И, если мне не изменяет память, все заголовки должны заканчиваться именно \r\n , не уверен, правда, та же ли ошибка будет в случае неправильных переводов строк, но стоит проверить.
evilface ★★
( 19.05.16 16:42:04 MSK )

Если Вы правильно сформулировали вопрос, то оно вам не надо. AJAX-у не надо лезть в HTTP-заголовки, это всё делает браузер. На стороне сервера, это тоже не очень надо, т.к. POST обычно обрабатывается как поток. Но если таки надо, то для CGI скриптов и программ, заголовок доступен в переменных окружения среды. Не знаю, как на Pithon-е, в массиве C это называется CONTENT_LENGTH, в sh/Bash подстановка $CONTENT_LENGTH.
Content-Length
Заголовок Content-Length указывает размер отправленного получателю тела объекта в байтах.
| Тип заголовка | Заголовок сущности |
|---|---|
| Можно не передавать | да |
Синтаксис
Content-Length:
Директивы
Спецификация
| Specification |
|---|
| HTTP Semantics # field.content-length |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 6 янв. 2024 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
- Product help
- Report an issue
Our communities
Developers
- Web Technologies
- Learn Web Development
- MDN Plus
- Hacks Blog
- Website Privacy Notice
- Cookies
- Legal
- Community Participation Guidelines
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.
Как рассчитывается значение заголовка Content-Length?
Я никогда об этом не задумывался, но сегодня вдруг задался вопросом, а что именно обозначает Content-Length? Исключительно размер тела запроса или оно показывает размер всего запроса, т. е. служебные заголовки + тело?
P. S. В документации написано, что это размер тела запроса, но не сказано, относятся ли служебные заголовки к телу!
- Вопрос задан более двух лет назад
- 1780 просмотров
2 комментария
Простой 2 комментария

Ярослав Иванов @space2pacman
Заголовки относятся к заголовкам. Длинна контента это только тело.

Content-Length бывает 0, при этом очевидно что если бы в него входили заголовки, то такого бы быть не могло.
Решения вопроса 1

Какой вопрос — такой и ответ
Content-length показывает размер Body.
Т.е. он вполне может быть нулевого размера даже при наличии кучи заголовков и статуса.
Для таких простых вопросов всегда есть гугл и докментация
https://developer.mozilla.org/en-US/docs/Web/HTTP/.
Ответ зашит в самом названии — «Content length»
В документации написано, что это размер тела запроса, но не сказано, относятся ли служебные заголовки к телу!
Как рассчитать Content-Length для заголовка запроса POST на PHP CURL?
Для интеграции с сервисом Склад-Облако OptiCore нужно выполнить POST запрос ClientOrder_CreateUpdate в BODY которого содержится XML. Обязательным заголовком HTTP для этого запроса является Content-Length, если он не указано то сервер просто рвет соединение по таймауту. Подскажите как можно рассчитать это значение для Content-Length на PHP? Вот тело запроса XML
Onwer54797 99dc684baa6af26767e849335db57488 40 2020-06-16 2020-06-16 2020-06-16 48 54797 0 0 0 13 PVZCode MSK2 SUMTOPAY 500.00 1 62 784 0 1199.00 0 1 63 784 0 779.00 0 1 64 784 0 2999.00 0 1
В POSTMAN запросы проходят за счет того что это значение рассчитывается им автоматически, но как это сделать на PHP. https://yadi.sk/i/oaSYQxLof1pS3w
Отслеживать
задан 16 июн 2020 в 8:29
128 1 1 золотой знак 1 1 серебряный знак 11 11 бронзовых знаков
Как обычно — curl_setopt($ch,CURLOPT_HTTPHEADER,array(‘Content-length:’.strlen($post_data)));
16 июн 2020 в 9:50
пробовал не прокатывает! Вообще что нужно высчитывать, длину строки тела BODY запроса? Длину строки XML? Если да то не прокатывает этот вариант. Тоже не понятно а почему?
16 июн 2020 в 10:59
Длина строки SOAP выше, обрезанная от новых линий, и тип данных (Content-Length) по ссылке раз вы работаете с SOAP.