ex

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
TMBOY
Date:
Tue Jul 18 16:27:22 2017 +0800
Revision:
44:c1d8923072ba
?

Who changed what in which revision?

UserRevisionLine numberNew 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 }