• Модуль: 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;
}