Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
namespace GuzzleHttp\Handler;
4
 
5
use GuzzleHttp\Psr7\Response;
6
use GuzzleHttp\Utils;
7
use Psr\Http\Message\RequestInterface;
8
use Psr\Http\Message\ResponseInterface;
9
use Psr\Http\Message\StreamInterface;
10
 
11
/**
12
 * Represents a cURL easy handle and the data it populates.
13
 *
14
 * @internal
15
 */
16
final class EasyHandle
17
{
18
    /**
19
     * @var resource|\CurlHandle cURL resource
20
     */
21
    public $handle;
22
 
23
    /**
24
     * @var StreamInterface Where data is being written
25
     */
26
    public $sink;
27
 
28
    /**
29
     * @var array Received HTTP headers so far
30
     */
31
    public $headers = [];
32
 
33
    /**
34
     * @var ResponseInterface|null Received response (if any)
35
     */
36
    public $response;
37
 
38
    /**
39
     * @var RequestInterface Request being sent
40
     */
41
    public $request;
42
 
43
    /**
44
     * @var array Request options
45
     */
46
    public $options = [];
47
 
48
    /**
49
     * @var int cURL error number (if any)
50
     */
51
    public $errno = 0;
52
 
53
    /**
54
     * @var \Throwable|null Exception during on_headers (if any)
55
     */
56
    public $onHeadersException;
57
 
58
    /**
59
     * @var \Exception|null Exception during createResponse (if any)
60
     */
61
    public $createResponseException;
62
 
63
    /**
64
     * Attach a response to the easy handle based on the received headers.
65
     *
66
     * @throws \RuntimeException if no headers have been received or the first
67
     *                           header line is invalid.
68
     */
69
    public function createResponse(): void
70
    {
71
        [$ver, $status, $reason, $headers] = HeaderProcessor::parseHeaders($this->headers);
72
 
73
        $normalizedKeys = Utils::normalizeHeaderKeys($headers);
74
 
75
        if (!empty($this->options['decode_content']) && isset($normalizedKeys['content-encoding'])) {
76
            $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']];
77
            unset($headers[$normalizedKeys['content-encoding']]);
78
            if (isset($normalizedKeys['content-length'])) {
79
                $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']];
80
 
81
                $bodyLength = (int) $this->sink->getSize();
82
                if ($bodyLength) {
83
                    $headers[$normalizedKeys['content-length']] = $bodyLength;
84
                } else {
85
                    unset($headers[$normalizedKeys['content-length']]);
86
                }
87
            }
88
        }
89
 
90
        // Attach a response to the easy handle with the parsed headers.
91
        $this->response = new Response(
92
            $status,
93
            $headers,
94
            $this->sink,
95
            $ver,
96
            $reason
97
        );
98
    }
99
 
100
    /**
101
     * @param string $name
102
     *
103
     * @return void
104
     *
105
     * @throws \BadMethodCallException
106
     */
107
    public function __get($name)
108
    {
109
        $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: ' . $name;
110
        throw new \BadMethodCallException($msg);
111
    }
112
}