- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/web/httpclient.php
- Класс: BitrixMainWebHttpClient
- Вызов: HttpClient::buildRequest
protected function buildRequest(RequestInterface $request): RequestInterface
{
$method = $request->getMethod();
$uri = $request->getUri();
$body = $request->getBody();
$punyUri = new Uri('http://' . $uri->getHost());
if (($punyHost = $punyUri->convertToPunycode()) != $uri->getHost())
{
$uri = $uri->withHost($punyHost);
$request = $request->withUri($uri);
}
if (!$request->hasHeader('Host'))
{
$request = $request->withHeader('Host', $uri->getHost());
}
if (!$request->hasHeader('Connection'))
{
$request = $request->withHeader('Connection', 'close');
}
if (!$request->hasHeader('Accept'))
{
$request = $request->withHeader('Accept', '*/*');
}
if (!$request->hasHeader('Accept-Language'))
{
$request = $request->withHeader('Accept-Language', 'en');
}
if ($this->compress)
{
$request = $request->withHeader('Accept-Encoding', 'gzip');
}
if (($userInfo = $uri->getUserInfo()) != '')
{
$request = $request->withHeader('Authorization', 'Basic ' . base64_encode($userInfo));
}
if ($this->proxyHost != '' && $this->proxyUser != '')
{
$request = $request->withHeader('Proxy-Authorization', 'Basic ' . base64_encode($this->proxyUser . ':' . $this->proxyPassword));
}
// the client doesn't support "Expect-Continue", set empty value for cURL
if ($this->useCurl)
{
$request = $request->withHeader('Expect', '');
}
if ($method == HttpMethod::POST)
{
//special processing for POST requests
if (!$request->hasHeader('Content-Type'))
{
$contentType = 'application/x-www-form-urlencoded';
if ($this->requestCharset != '')
{
$contentType .= '; charset=' . $this->requestCharset;
}
$request = $request->withHeader('Content-Type', $contentType);
}
}
$size = $body->getSize();
if ($size > 0 || $method == HttpMethod::POST || $method == HttpMethod::PUT)
{
// A valid Content-Length field value is required on all HTTP/1.0 request messages containing an entity body.
if (!$request->hasHeader('Content-Length'))
{
$request = $request->withHeader('Content-Length', $size ?? strlen((string)$body));
}
}
return $request;
}