Здравствуйте! Делаем интеграцию с SOAP сервисом "СкладОблако" Этот сервис принимает запросы HTTP 1.1 в теле которых есть XML с параметрами (о заказе), и есть обязательные HTTP заголовки которые нужно передавать в этом запросе. Так вот там есть заголовок 'Content-Length' который нужно рассчитать для тела в котором XML, пробовал и strlen и filesize ни что не рассчитывает верное значение! Данные все в UTF-8, сам файл и сайт тоже. Вот пример кода запроса http://cdekff.ddns.net:40100/OUTBOUND.asmx?op=ClientOrder_CreateUpdate Пробовал и CURL и HTTPGuzzle ничего не выходит! Только через PostMan запросы улетают на ура, но он там автоматически рассчитывает 'Content-Length' и подставляет этот заголовок в запрос. strlen - не правильно считает, всегда ниже верного значения которое можно отследить через Fiddler + PostMan. Вот кратко что пытаемся реализовать: $body = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><Client_CreateUpdate xmlns="http://cowms.ru/outbound"><User>Onwer54797</User><Pass>a7d4ea97a88d3a319975ff70fa2bb751</Pass><ClientCode>1</ClientCode><LastName>Павел</LastName><FirstName>Фоличев</FirstName><Email>folichev@gmail.com</Email><Phone>+79255563346</Phone><CountryCode>RU</CountryCode><AddressString>Тамбов, ул. Мичуринская, 185А, корп. 2 #STMB6</AddressString><CountryCode>RU</CountryCode><City>Красноярск</City><Street>Тамбов, ул. Мичуринская, 185А, корп. 2 #STMB6</Street><House>1</House><App>2</App><Comment></Comment></Client_CreateUpdate></soap:Body></soap:Envelope>'; $content_length = strlen($body); $response = $client->request('POST', $host, [ 'headers' => [ 'Content-Type' => 'text/xml; charset=utf-8', 'Host' => 'cdekff.ddns.net', 'SOAPAction' => 'http://cowms.ru/outbound/Client_CreateUpdate';, 'Content-Length' => $content_length, ], 'timeout' => 180, 'body' => $body, 'verify' => false ]); $XMLData = $response->getBody(); В итоге сервер вернет http_code HTTP/1.1 400 Bad Request из-за того что он не примет данные с не верным 'Content-Length' Как его вообще в принципе рассчитывать нужно в PHP ?
@toorr2p, content-length всего лишь размер в байтах тела запроса. Поэтому вполне уместно использование filesize() и strlen(). Попробуйте для начала "ручками" подобрать константное значение и получить ответ от сервера и если оно будет отличаться от ожидаемого (количества байт, то есть, "десятичного количества октетов" в теле запроса) - задайте техподдержке сервиса вопрос о причинах этого недоразумения, приведя конкретный пример запроса (заголовков и тела).
Спасибо за ответ! Выяснили причину, она была в значении PHP: php_value mbstring.func_overload 2 которое использует Битрикс для установки в UTF-8