66 lines
2.4 KiB
PHP
66 lines
2.4 KiB
PHP
|
<?php
|
||
|
namespace nur;
|
||
|
|
||
|
use nur\b\CurlException;
|
||
|
|
||
|
class curl {
|
||
|
private static function _generic(string $url, ?array $curlOptions=null, ?array &$headers=null): string {
|
||
|
if ($curlOptions === null) $curlOptions = [];
|
||
|
$curlOptions = $curlOptions + [CURLOPT_URL => $url];
|
||
|
if (!isset($curlOptions[CURLOPT_RETURNTRANSFER])) {
|
||
|
$curlOptions[CURLOPT_RETURNTRANSFER] = true;
|
||
|
}
|
||
|
$extract_headers = isset($curlOptions[CURLOPT_HEADER]) && $curlOptions[CURLOPT_HEADER];
|
||
|
$ch = curl_init();
|
||
|
if ($ch === false) throw new CurlException(null, "init");
|
||
|
curl_setopt_array($ch, $curlOptions);
|
||
|
try {
|
||
|
$result = curl_exec($ch);
|
||
|
if ($result === false) throw new CurlException($ch);
|
||
|
if ($extract_headers) {
|
||
|
$info = curl_getinfo($ch);
|
||
|
$headers_size = $info["header_size"];
|
||
|
$headers = substr($result, 0, $headers_size);
|
||
|
$headers = explode("\r\n", $headers);
|
||
|
$result = substr($result, $headers_size);
|
||
|
}
|
||
|
return strval($result);
|
||
|
} finally {
|
||
|
curl_close($ch);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static final function get(string $url, ?array $params=null, ?array $curlOptions=null, ?array &$headers=null): string {
|
||
|
if ($params !== null) {
|
||
|
$query = http_build_query($params);
|
||
|
if (strpos($url, "?") !== false) {
|
||
|
$url = "$url&$query";
|
||
|
} else {
|
||
|
$url = "$url?$query";
|
||
|
}
|
||
|
}
|
||
|
return self::_generic($url, $curlOptions, $headers);
|
||
|
}
|
||
|
|
||
|
private static function _custom(string $method, string $url, ?array $params=null, ?array $curlOptions=null, ?array &$headers=null): string {
|
||
|
if ($curlOptions === null) $curlOptions = [];
|
||
|
$curlOptions[CURLOPT_CUSTOMREQUEST] = $method;
|
||
|
if ($params !== null) {
|
||
|
$curlOptions[CURLOPT_POSTFIELDS] = http_build_query($params);
|
||
|
}
|
||
|
return self::_generic($url, $curlOptions, $headers);
|
||
|
}
|
||
|
|
||
|
static final function post(string $url, ?array $params=null, ?array $curlOptions=null, ?array &$headers=null): string {
|
||
|
return self::_custom("POST", $url, $params, $curlOptions, $headers);
|
||
|
}
|
||
|
|
||
|
static final function put(string $url, ?array $params=null, ?array $curlOptions=null, ?array &$headers=null): string {
|
||
|
return self::_custom("PUT", $url, $params, $curlOptions, $headers);
|
||
|
}
|
||
|
|
||
|
static final function delete(string $url, ?array $params=null, ?array $curlOptions=null, ?array &$headers=null): string {
|
||
|
return self::_custom("DELETE", $url, $params, $curlOptions, $headers);
|
||
|
}
|
||
|
}
|