| 1 |
<?php |
| 2 |
namespace Kibo\PhastPlugins\PhastPress; |
| 3 |
|
| 4 |
use Kibo\Phast\HTTP\Client; |
| 5 |
use Kibo\Phast\HTTP\Exceptions\NetworkError; |
| 6 |
use Kibo\Phast\HTTP\Response; |
| 7 |
use Kibo\Phast\ValueObjects\URL; |
| 8 |
|
| 9 |
class RequestsHTTPClient implements Client { |
| 10 |
public function get(URL $url, array $headers = []) { |
| 11 |
if (!is_callable([\Requests::class, 'get'])) { |
| 12 |
throw new NetworkError('\\Requests::get is not available'); |
| 13 |
} |
| 14 |
$response = \Requests::get((string) $url, $headers); |
| 15 |
$response->throw_for_status(); |
| 16 |
return $this->makePhastResponse($response); |
| 17 |
} |
| 18 |
|
| 19 |
public function post(URL $url, $data, array $headers = []) { |
| 20 |
if (!is_callable([\Requests::class, 'post'])) { |
| 21 |
throw new NetworkError('\\Requests::post is not available'); |
| 22 |
} |
| 23 |
$options = ['connect_timeout' => 10, 'timeout' => 20]; |
| 24 |
$response = \Requests::post((string) $url, $headers, $data, $options); |
| 25 |
$response->throw_for_status(); |
| 26 |
return $this->makePhastResponse($response); |
| 27 |
} |
| 28 |
|
| 29 |
private function makePhastResponse(\Requests_Response $requestsResponse) { |
| 30 |
$phastResponse = new Response(); |
| 31 |
$phastResponse->setContent($requestsResponse->body); |
| 32 |
foreach ($requestsResponse->headers as $name => $value) { |
| 33 |
$phastResponse->setHeader($name, $value); |
| 34 |
} |
| 35 |
return $phastResponse; |
| 36 |
} |
| 37 |
|
| 38 |
public static function loadWordPressRequests() { |
| 39 |
if (class_exists(\Requests::class)) { |
| 40 |
return; |
| 41 |
} |
| 42 |
$dir = $_SERVER['SCRIPT_FILENAME']; |
| 43 |
do { |
| 44 |
$dir = dirname($dir); |
| 45 |
$classFile = "$dir/wp-includes/class-requests.php"; |
| 46 |
$caFile = "$dir/wp-includes/certificates/ca-bundle.crt"; |
| 47 |
if (file_exists($classFile) && file_exists($caFile)) { |
| 48 |
@include_once $classFile; |
| 49 |
if (class_exists(\Requests::class)) { |
| 50 |
\Requests::register_autoloader(); |
| 51 |
\Requests::set_certificate_path($caFile); |
| 52 |
return; |
| 53 |
} |
| 54 |
} |
| 55 |
} while ($dir != dirname($dir)); |
| 56 |
} |
| 57 |
} |
| 58 |
|