Для наглядности сразу с примера кода.
По итогу отправляются два запроса поочередно, для первого устанавливается заголовок "Content-Length: 5", для второго, аналогично, "Content-Length: 5", хотя ожидается 9...
Можно, конечно, между запросами сделать "setHeader" для "ручной" установки, НО...
Получается, что в приведенном примере мы отправляем заголовок несоответствующий реальном размеру тела запроса, а это уже неправильно. Было бы логичнее не проверять перед отправкой наличие установленного заголовка, а принудительно его пересчитывать при каждой отправке.
Код из исходника /bitrix/modules/main/lib/web/httpclient.php:760
| Код |
|---|
$client = new \Bitrix\Main\Web\HttpClient();
$client->post('http://mysite.com/test', ['xx' => 'yy']);
$client->post('http://mysite.com/test', ['xxxx' => 'yyyy']);
|
По итогу отправляются два запроса поочередно, для первого устанавливается заголовок "Content-Length: 5", для второго, аналогично, "Content-Length: 5", хотя ожидается 9...
Можно, конечно, между запросами сделать "setHeader" для "ручной" установки, НО...
Получается, что в приведенном примере мы отправляем заголовок несоответствующий реальном размеру тела запроса, а это уже неправильно. Было бы логичнее не проверять перед отправкой наличие установленного заголовка, а принудительно его пересчитывать при каждой отправке.
Код из исходника /bitrix/modules/main/lib/web/httpclient.php:760
| Код |
|---|
if($entityBody <> '' || $method == self::HTTP_POST)
{
//HTTP/1.0 requires Content-Length for POST
if($this->requestHeaders->get("Content-Length") === null)
{
$this->setHeader("Content-Length", BinaryString::getLength($entityBody));
}
}
|