PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents / 2.0.3
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents v2.0.3
4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 trunk 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9 4.0.0 4.0.1 4.0.10 4.0.11 4.0.12 4.0.13 4.0.14 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.10 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.4.0 4.4.1 4.4.10 4.4.11 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5.0 4.5.1
embedpress / vendor / ostraining / embera / Lib / Embera / HttpRequest.php
embedpress / vendor / ostraining / embera / Lib / Embera Last commit date
Adapters 8 years ago Providers 8 years ago Autoload.php 8 years ago Embera.php 8 years ago FakeResponse.php 8 years ago Formatter.php 8 years ago HtmlProcessor.php 8 years ago HttpRequest.php 8 years ago Oembed.php 8 years ago Providers.php 8 years ago Url.php 8 years ago
HttpRequest.php
163 lines
1 <?php
2 /**
3 * HttpRequest.php
4 *
5 * @package Embera
6 * @author Michael Pratt <pratt@hablarmierda.net>
7 * @link http://www.michael-pratt.com/
8 *
9 * For the full copyright and license information, please view the LICENSE
10 * file that was distributed with this source code.
11 */
12
13 namespace Embera;
14
15 /**
16 * This class is in charge of doing http requests. Its a very minimal
17 * wrapper for curl or file_get_contents
18 */
19 class HttpRequest
20 {
21 /** @var array Array with custom curl/fopen options */
22 protected $config = array();
23
24 /** @var string User Agent String */
25 protected $userAgent = 'Mozilla/5.0 PHP/Embera';
26
27 /**
28 * Constructor
29 *
30 * @param array $config
31 */
32 public function __construct(array $config = array())
33 {
34 $this->config = array_merge(array(
35 'curl' => array(),
36 'fopen' => array(),
37 'force_redirects' => false,
38 'prefer_curl' => true,
39 ), $config);
40 }
41
42 /**
43 * Executes http requests
44 *
45 * @param string $url
46 * @param array $params Additional parameters for the respective part
47 * @return string
48 *
49 * @throws Exception when an error ocurred or if no way to do a request exists
50 */
51 public function fetch($url, array $params = array())
52 {
53 $params = array_merge(array(
54 'curl' => array(),
55 'fopen' => array(),
56 ), $params);
57
58 if (function_exists('curl_init') && $this->config['prefer_curl']) {
59 return $this->curl($url, $params['curl']);
60 }
61
62 return $this->fileGetContents($url, $params['fopen']);
63 }
64
65 /**
66 * Uses Curl to fetch data from an url
67 *
68 * @param string $url
69 * @param array $params Additional parameters for the respective part
70 * @return string
71 *
72 * @throws Exception when the returned status code is not 200 or no data was found
73 */
74 protected function curl($url, array $params = array())
75 {
76 // Not using array_merge here because that function reindexes numeric keys
77 $options = $params + $this->config['curl'] + array(
78 CURLOPT_USERAGENT => $this->userAgent,
79 CURLOPT_ENCODING => '',
80 CURLOPT_FOLLOWLOCATION => true,
81 );
82
83 $options[CURLOPT_URL] = $url;
84 $options[CURLOPT_HEADER] = true;
85 $options[CURLOPT_RETURNTRANSFER] = 1;
86
87 // CURLOPT_FOLLOWLOCATION doesnt play well with open_basedir/safe_mode
88 if (ini_get('safe_mode') || ini_get('open_basedir')) {
89 $options[CURLOPT_FOLLOWLOCATION] = false;
90 $options[CURLOPT_TIMEOUT] = 15;
91 $this->config['force_redirects'] = true;
92 }
93
94 $handler = curl_init();
95 curl_setopt_array($handler, $options);
96 $response = curl_exec($handler);
97
98 $status = curl_getinfo($handler, CURLINFO_HTTP_CODE);
99 $headerSize = curl_getinfo($handler, CURLINFO_HEADER_SIZE);
100
101 $header = substr($response, 0, $headerSize);
102 $body = substr($response, $headerSize);
103 curl_close($handler);
104
105 if ($this->config['force_redirects'] && in_array($status, array('301', '302'))) {
106
107 if (preg_match('~(?:location|uri): ?([^\n]+)~i', $header, $matches)) {
108
109 $url = trim($matches['1']);
110
111 // Relative redirections
112 if (substr($url, 0, 1) == '/') {
113 $parsed = parse_url($options[CURLOPT_URL]);
114 $url = $parsed['scheme'] . '://' . rtrim($parsed['host'], '/') . $url;
115 }
116
117 return $this->curl($url, $options);
118 }
119 }
120
121 if (empty($body) || !in_array($status, array('200'))) {
122 throw new \Exception($status . ': Invalid response for ' . $url);
123 }
124
125 return $body;
126 }
127
128 /**
129 * Uses file_get_contents to fetch data from an url
130 *
131 * @param string $url
132 * @param array $params Additional parameters for the respective part
133 * @return string
134 *
135 * @throws Exception when allow_url_fopen is disabled or when no data was returned
136 */
137 protected function fileGetContents($url, array $params = array())
138 {
139 if (!ini_get('allow_url_fopen')) {
140 throw new \Exception('Could not execute lookup, allow_url_fopen is disabled');
141 }
142
143 if (!filter_var($url, FILTER_VALIDATE_URL)) {
144 throw new \Exception('Invalid url ' . $url);
145 }
146
147 $defaultOptions = array(
148 'method' => 'GET',
149 'user_agent' => $this->userAgent,
150 'follow_location' => 1,
151 'max_redirects' => 20,
152 'timeout' => 40
153 );
154
155 $context = array('http' => array_merge($defaultOptions, $this->config['fopen'], $params));
156 if ($data = file_get_contents($url, false, stream_context_create($context))) {
157 return $data;
158 }
159
160 throw new \Exception('Invalid Server Response from ' . $url);
161 }
162 }
163