- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/web/http/curl/handler.php
- Класс: BitrixMainWebHttpCurlHandler
- Вызов: Handler::setOptions
protected function setOptions(array $options): void
{
$request = $this->request;
$uri = $request->getUri();
$curlOptions = [
CURLOPT_URL => (string)$uri,
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => false,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTP_VERSION => ($request->getProtocolVersion() === '1.1' ? CURL_HTTP_VERSION_1_1 : CURL_HTTP_VERSION_1_0),
CURLOPT_CONNECTTIMEOUT => (int)($options['socketTimeout'] ?? 30),
CURLOPT_LOW_SPEED_TIME => (int)($options['streamTimeout'] ?? 60),
CURLOPT_LOW_SPEED_LIMIT => 1, // bytes/sec
CURLOPT_HTTPHEADER => $this->buildHeaders(),
];
if (isset($options['contextOptions']['ssl']['verify_peer']))
{
$curlOptions[CURLOPT_SSL_VERIFYPEER] = (bool)$options['contextOptions']['ssl']['verify_peer'];
}
if (isset($options['contextOptions']['ssl']['verify_peer_name']))
{
$curlOptions[CURLOPT_SSL_VERIFYHOST] = $options['contextOptions']['ssl']['verify_peer_name'] ? 2 : 0;
}
$method = $request->getMethod();
if ($method === 'HEAD')
{
$curlOptions[CURLOPT_NOBODY] = true;
}
else
{
$curlOptions[CURLOPT_CUSTOMREQUEST] = $method;
}
if (isset($options['effectiveIp']) && $options['effectiveIp'] instanceof IpAddress)
{
//resolved in HttpClient if private IPs were disabled
$curlOptions[CURLOPT_RESOLVE] = [$uri->getHost() . ':' . $uri->getPort() . ':' . $options['effectiveIp']];
}
if (isset($options['proxyHost']))
{
$curlOptions[CURLOPT_PROXY] = (string)$options['proxyHost'];
if (isset($options['proxyPort']))
{
$curlOptions[CURLOPT_PROXYPORT] = (int)$options['proxyPort'];
}
}
if ($method != 'GET' && $method != 'HEAD' && $method != 'TRACE')
{
$body = $request->getBody();
$size = $body->getSize();
if ($size !== 0)
{
if ($body->isSeekable())
{
$body->rewind();
}
$curlOptions[CURLOPT_UPLOAD] = true;
if ($size !== null)
{
$curlOptions[CURLOPT_INFILESIZE] = $size;
}
$curlOptions[CURLOPT_READFUNCTION] = [$this, 'readRequestBody'];
}
}
$curlOptions[CURLOPT_HEADERFUNCTION] = [$this, 'receiveHeaders'];
$curlOptions[CURLOPT_WRITEFUNCTION] = [$this, 'receiveBody'];
if (!empty($options['curlLogFile']))
{
$this->logFileHandle = fopen($options['curlLogFile'], 'a+');
$curlOptions[CURLOPT_STDERR] = $this->logFileHandle;
$curlOptions[CURLOPT_VERBOSE] = true;
}
curl_setopt_array($this->handle, $curlOptions);
}