Class yii\httpclient\StreamTransport
| Inheritance | yii\ |
|---|---|
| Available since extension's version | 2.0 |
| Source Code | https://github.com/yiisoft/yii2-httpclient/blob/master/src/StreamTransport.php |
StreamTransport sends HTTP messages using Streams
For this transport, you may setup request options using Context Options
Public Methods
| Method | Description | Defined By |
|---|---|---|
| batchSend() | Performs multiple HTTP requests. | yii\ |
| send() | Performs given request. | yii\ |
Method Details
Defined in:
yii\
Performs multiple HTTP requests.
Particular transport may benefit from this method, allowing sending requests in parallel.
This method accepts an array of the yii\
| public yii\ | ||
| $requests | yii\ |
Requests to perform. |
| return | yii\ |
Responses list. |
|---|---|---|
| throws | yii\ |
|
public function batchSend(array $requests)
{
$responses = [];
foreach ($requests as $key => $request) {
$responses[$key] = $this->send($request);
}
return $responses;
}
Performs given request.
| public yii\ | ||
| $request | mixed |
Request to be sent. |
| return | yii\ |
Response instance. |
|---|---|---|
| throws | yii\ |
on failure. |
public function send($request)
{
$request->beforeSend();
$request->prepare();
$url = $request->getFullUrl();
$method = strtoupper($request->getMethod());
$contextOptions = [
'http' => [
'method' => $method,
'ignore_errors' => true,
],
'ssl' => [
'verify_peer' => false,
],
];
$content = $request->getContent();
if ($content !== null) {
$contextOptions['http']['content'] = $content;
}
$headers = $request->composeHeaderLines();
$contextOptions['http']['header'] = $headers;
$contextOptions = ArrayHelper::merge($contextOptions, $this->composeContextOptions($request->getOptions()));
$token = $request->client->createRequestLogToken($method, $url, $headers, $content);
Yii::info($token, __METHOD__);
Yii::beginProfile($token, __METHOD__);
try {
$context = stream_context_create($contextOptions);
$stream = fopen($url, 'rb', false, $context);
if (false === $stream) {
$error = error_get_last();
throw new Exception(sprintf('Error while fopen(%s): %s', $url, isset($error['message']) ? $error['message'] : 'Unknown error'));
}
$responseContent = stream_get_contents($stream);
// see https://php.net/manual/en/reserved.variables.httpresponseheader.php
if (function_exists('http_get_last_response_headers')) {
$http_response_header = http_get_last_response_headers();
}
$responseHeaders = (array)$http_response_header;
fclose($stream);
} catch (\Exception $e) {
if (isset($stream) && is_resource($stream)) {
fclose($stream);
}
Yii::endProfile($token, __METHOD__);
throw new Exception($e->getMessage(), $e->getCode(), $e);
}
Yii::endProfile($token, __METHOD__);
$response = $request->client->createResponse($responseContent, $responseHeaders);
$request->afterSend($response);
return $response;
}