71 CURLOPT_URL => (string)
$uri,
72 CURLOPT_HEADER =>
false,
73 CURLOPT_RETURNTRANSFER =>
false,
74 CURLOPT_FOLLOWLOCATION =>
false,
75 CURLOPT_HTTP_VERSION => (
$request->getProtocolVersion() ===
'1.1' ? CURL_HTTP_VERSION_1_1 : CURL_HTTP_VERSION_1_0),
76 CURLOPT_CONNECTTIMEOUT => (int)(
$options[
'socketTimeout'] ?? 30),
77 CURLOPT_LOW_SPEED_TIME => (int)(
$options[
'streamTimeout'] ?? 60),
78 CURLOPT_LOW_SPEED_LIMIT => 1,
82 if (isset(
$options[
'contextOptions'][
'ssl'][
'verify_peer']))
84 $curlOptions[CURLOPT_SSL_VERIFYPEER] = (bool)
$options[
'contextOptions'][
'ssl'][
'verify_peer'];
86 if (isset(
$options[
'contextOptions'][
'ssl'][
'verify_peer_name']))
88 $curlOptions[CURLOPT_SSL_VERIFYHOST] =
$options[
'contextOptions'][
'ssl'][
'verify_peer_name'] ? 2 : 0;
94 $curlOptions[CURLOPT_NOBODY] =
true;
98 $curlOptions[CURLOPT_CUSTOMREQUEST] =
$method;
104 $curlOptions[CURLOPT_RESOLVE] = [
$uri->getHost() .
':' .
$uri->getPort() .
':' .
$options[
'effectiveIp']];
109 $curlOptions[CURLOPT_PROXY] = (string)
$options[
'proxyHost'];
113 $curlOptions[CURLOPT_PROXYPORT] = (int)
$options[
'proxyPort'];
120 $size = $body->getSize();
124 if ($body->isSeekable())
129 $curlOptions[CURLOPT_UPLOAD] =
true;
133 $curlOptions[CURLOPT_INFILESIZE] = $size;
136 $curlOptions[CURLOPT_READFUNCTION] = [$this,
'readRequestBody'];
140 $curlOptions[CURLOPT_HEADERFUNCTION] = [$this,
'receiveHeaders'];
142 $curlOptions[CURLOPT_WRITEFUNCTION] = [$this,
'receiveBody'];
144 if (!empty(
$options[
'curlLogFile']))
146 $this->logFileHandle = fopen(
$options[
'curlLogFile'],
'a+');
148 $curlOptions[CURLOPT_VERBOSE] =
true;
154 curl_reset($this->handle);
156 curl_setopt_array($this->handle, $curlOptions);
233 foreach ($this->request->getHeaders() as
$name => $values)
235 foreach ($values as $value)
237 $headers[] =
$name .
': ' . $value;
241 if ($this->
getLogger() && $this->debugLevel)
243 $logUri =
new Uri((
string)$this->request->getUri());
244 $logUri->convertToUnicode();
248 $request = $this->request->getMethod() .
' ' . $this->request->getRequestTarget() .
' HTTP/' . $this->request->getProtocolVersion() .
"\n"
249 . implode(
"\n", $headers) .
"\n";