ex
Fork of mbed-os-example-mbed5-blinky by
dumi_doc-master/schema/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php@44:c1d8923072ba, 2017-07-18 (annotated)
- Committer:
- TMBOY
- Date:
- Tue Jul 18 16:27:22 2017 +0800
- Revision:
- 44:c1d8923072ba
?
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| TMBOY | 44:c1d8923072ba | 1 | <?php |
| TMBOY | 44:c1d8923072ba | 2 | |
| TMBOY | 44:c1d8923072ba | 3 | /* |
| TMBOY | 44:c1d8923072ba | 4 | * This file is part of the JsonSchema package. |
| TMBOY | 44:c1d8923072ba | 5 | * |
| TMBOY | 44:c1d8923072ba | 6 | * For the full copyright and license information, please view the LICENSE |
| TMBOY | 44:c1d8923072ba | 7 | * file that was distributed with this source code. |
| TMBOY | 44:c1d8923072ba | 8 | */ |
| TMBOY | 44:c1d8923072ba | 9 | |
| TMBOY | 44:c1d8923072ba | 10 | namespace JsonSchema\Uri\Retrievers; |
| TMBOY | 44:c1d8923072ba | 11 | |
| TMBOY | 44:c1d8923072ba | 12 | use JsonSchema\Validator; |
| TMBOY | 44:c1d8923072ba | 13 | |
| TMBOY | 44:c1d8923072ba | 14 | /** |
| TMBOY | 44:c1d8923072ba | 15 | * Tries to retrieve JSON schemas from a URI using cURL library |
| TMBOY | 44:c1d8923072ba | 16 | * |
| TMBOY | 44:c1d8923072ba | 17 | * @author Sander Coolen <sander@jibber.nl> |
| TMBOY | 44:c1d8923072ba | 18 | */ |
| TMBOY | 44:c1d8923072ba | 19 | class Curl extends AbstractRetriever |
| TMBOY | 44:c1d8923072ba | 20 | { |
| TMBOY | 44:c1d8923072ba | 21 | protected $messageBody; |
| TMBOY | 44:c1d8923072ba | 22 | |
| TMBOY | 44:c1d8923072ba | 23 | public function __construct() |
| TMBOY | 44:c1d8923072ba | 24 | { |
| TMBOY | 44:c1d8923072ba | 25 | if (!function_exists('curl_init')) { |
| TMBOY | 44:c1d8923072ba | 26 | throw new \RuntimeException("cURL not installed"); |
| TMBOY | 44:c1d8923072ba | 27 | } |
| TMBOY | 44:c1d8923072ba | 28 | } |
| TMBOY | 44:c1d8923072ba | 29 | |
| TMBOY | 44:c1d8923072ba | 30 | /** |
| TMBOY | 44:c1d8923072ba | 31 | * {@inheritDoc} |
| TMBOY | 44:c1d8923072ba | 32 | * @see \JsonSchema\Uri\Retrievers\UriRetrieverInterface::retrieve() |
| TMBOY | 44:c1d8923072ba | 33 | */ |
| TMBOY | 44:c1d8923072ba | 34 | public function retrieve($uri) |
| TMBOY | 44:c1d8923072ba | 35 | { |
| TMBOY | 44:c1d8923072ba | 36 | $ch = curl_init(); |
| TMBOY | 44:c1d8923072ba | 37 | |
| TMBOY | 44:c1d8923072ba | 38 | curl_setopt($ch, CURLOPT_URL, $uri); |
| TMBOY | 44:c1d8923072ba | 39 | curl_setopt($ch, CURLOPT_HEADER, true); |
| TMBOY | 44:c1d8923072ba | 40 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |
| TMBOY | 44:c1d8923072ba | 41 | curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: ' . Validator::SCHEMA_MEDIA_TYPE)); |
| TMBOY | 44:c1d8923072ba | 42 | |
| TMBOY | 44:c1d8923072ba | 43 | $response = curl_exec($ch); |
| TMBOY | 44:c1d8923072ba | 44 | if (false === $response) { |
| TMBOY | 44:c1d8923072ba | 45 | throw new \JsonSchema\Exception\ResourceNotFoundException('JSON schema not found'); |
| TMBOY | 44:c1d8923072ba | 46 | } |
| TMBOY | 44:c1d8923072ba | 47 | |
| TMBOY | 44:c1d8923072ba | 48 | $this->fetchMessageBody($response); |
| TMBOY | 44:c1d8923072ba | 49 | $this->fetchContentType($response); |
| TMBOY | 44:c1d8923072ba | 50 | |
| TMBOY | 44:c1d8923072ba | 51 | curl_close($ch); |
| TMBOY | 44:c1d8923072ba | 52 | |
| TMBOY | 44:c1d8923072ba | 53 | return $this->messageBody; |
| TMBOY | 44:c1d8923072ba | 54 | } |
| TMBOY | 44:c1d8923072ba | 55 | |
| TMBOY | 44:c1d8923072ba | 56 | /** |
| TMBOY | 44:c1d8923072ba | 57 | * @param string $response cURL HTTP response |
| TMBOY | 44:c1d8923072ba | 58 | */ |
| TMBOY | 44:c1d8923072ba | 59 | private function fetchMessageBody($response) |
| TMBOY | 44:c1d8923072ba | 60 | { |
| TMBOY | 44:c1d8923072ba | 61 | preg_match("/(?:\r\n){2}(.*)$/ms", $response, $match); |
| TMBOY | 44:c1d8923072ba | 62 | $this->messageBody = $match[1]; |
| TMBOY | 44:c1d8923072ba | 63 | } |
| TMBOY | 44:c1d8923072ba | 64 | |
| TMBOY | 44:c1d8923072ba | 65 | /** |
| TMBOY | 44:c1d8923072ba | 66 | * @param string $response cURL HTTP response |
| TMBOY | 44:c1d8923072ba | 67 | * @return boolean Whether the Content-Type header was found or not |
| TMBOY | 44:c1d8923072ba | 68 | */ |
| TMBOY | 44:c1d8923072ba | 69 | protected function fetchContentType($response) |
| TMBOY | 44:c1d8923072ba | 70 | { |
| TMBOY | 44:c1d8923072ba | 71 | if (0 < preg_match("/Content-Type:(\V*)/ims", $response, $match)) { |
| TMBOY | 44:c1d8923072ba | 72 | $this->contentType = trim($match[1]); |
| TMBOY | 44:c1d8923072ba | 73 | |
| TMBOY | 44:c1d8923072ba | 74 | return true; |
| TMBOY | 44:c1d8923072ba | 75 | } |
| TMBOY | 44:c1d8923072ba | 76 | |
| TMBOY | 44:c1d8923072ba | 77 | return false; |
| TMBOY | 44:c1d8923072ba | 78 | } |
| TMBOY | 44:c1d8923072ba | 79 | } |
