initial commit

master
Michael Ochmann 2 years ago
commit d3976988c4
  1. 5
      .gitignore
  2. 18
      composer.json
  3. 89
      src/Curl.php
  4. 11
      src/Error.php
  5. 67
      src/Info.php
  6. 176
      src/Option.php
  7. 12
      src/Pause.php

5
.gitignore vendored

@ -0,0 +1,5 @@
.idea
.vscode
.DS_Store
vendor

@ -0,0 +1,18 @@
{
"name": "massivedynamic/curl",
"description": "a OOP wrapper for PHP cURL",
"type": "library",
"license": "MIT",
"autoload": {
"psr-4": {
"massivedynamic\\curl\\": "src/"
}
},
"authors": [
{
"name": "MikO",
"email": "miko@massivednyamic.eu"
}
],
"require": {}
}

@ -0,0 +1,89 @@
<?php declare(strict_types=1);
namespace massivedynamic\curl;
use CurlHandle;
class Curl {
private CurlHandle $handle;
private string $lastReturn;
public function __construct(?string $url = null) {
$this->lastReturn = "";
$this->handle = curl_init($url);
}
public function errno() : int {
return curl_errno($this->handle);
}
public function error() : Error {
$errno = $this->errno();
return new Error(curl_strerror($errno), $errno);
}
public function escape(string $string) : ?string {
$out = curl_escape($this->handle, $string);
return $out === false ? null : $out;
}
public function exec() : bool {
$result = curl_exec($this->handle);
if (is_string($result)) {
$this->lastReturn = $result;
return true;
}
return $result;
}
public function getInfo(Info $option) : mixed {
return curl_getinfo($this->handle, $option->value);
}
public function pause(Pause $flag) : int {
return curl_pause($this->handle, $flag->value);
}
public function reset() : void {
$this->lastReturn = "";
curl_reset($this->handle);
}
public function setOpt(Option $option, mixed $value = null) : bool {
if (is_array($option)) {
$options = [];
array_walk($option, fn($key, $value) => $key instanceof \BackedEnum ? $options[$key->value] = $key : $options[$key] = $value);
assert($value === null, "Value hast to be null on `setOpt` with an array");
return curl_setopt_array($this->handle, $options);
}
return curl_setopt($this->handle, $option->value, $value === null ? "" : $value);
}
public function result() : string {
return $this->lastReturn;
}
public function close() : void {
curl_close($this->handle);
}
public function unescape(string $string) : ?string {
$out = curl_unescape($this->handle, $string);
return $out === false ? null : $out;
}
public function upkeep() : bool {
return curl_upkeep($this->handle);
}
public function version() : ?array {
$info = curl_version($this->handle);
return $info === false ? null : $info;
}
}

@ -0,0 +1,11 @@
<?php declare(strict_types=1);
namespace massivedynamic\curl;
//@struct
class Error {
public function __construct(
public string $message,
public int $code
){}
}

@ -0,0 +1,67 @@
<?php declare(strict_types=1);
namespace massivedynamic\curl;
enum Info : int {
case EFFECTIVE_URL = CURLINFO_EFFECTIVE_URL;
case HTTP_CODE = CURLINFO_HTTP_CODE;
case FILETIME = CURLINFO_FILETIME;
case TOTAL_TIME = CURLINFO_TOTAL_TIME;
case NAMELOOKUP_TIME = CURLINFO_NAMELOOKUP_TIME;
case CONNECT_TIME = CURLINFO_CONNECT_TIME;
case PRETRANSFER_TIME = CURLINFO_PRETRANSFER_TIME;
case STARTTRANSFER_TIME = CURLINFO_STARTTRANSFER_TIME;
case REDIRECT_COUNT = CURLINFO_REDIRECT_COUNT;
case REDIRECT_TIME = CURLINFO_REDIRECT_TIME;
case REDIRECT_URL = CURLINFO_REDIRECT_URL;
case PRIMARY_IP = CURLINFO_PRIMARY_IP;
case PRIMARY_PORT = CURLINFO_PRIMARY_PORT;
case LOCAL_IP = CURLINFO_LOCAL_IP;
case LOCAL_PORT = CURLINFO_LOCAL_PORT;
case SIZE_UPLOAD = CURLINFO_SIZE_UPLOAD;
case SIZE_DOWNLOAD = CURLINFO_SIZE_DOWNLOAD;
case SPEED_DOWNLOAD = CURLINFO_SPEED_DOWNLOAD;
case SPEED_UPLOAD = CURLINFO_SPEED_UPLOAD;
case HEADER_SIZE = CURLINFO_HEADER_SIZE;
case HEADER_OUT = CURLINFO_HEADER_OUT;
case REQUEST_SIZE = CURLINFO_REQUEST_SIZE;
case SSL_VERIFYRESULT = CURLINFO_SSL_VERIFYRESULT;
case CONTENT_LENGTH_DOWNLOAD = CURLINFO_CONTENT_LENGTH_DOWNLOAD;
case CONTENT_LENGTH_UPLOAD = CURLINFO_CONTENT_LENGTH_UPLOAD;
case CONTENT_TYPE = CURLINFO_CONTENT_TYPE;
case PRIVATE = CURLINFO_PRIVATE;
case RESPONSE_CODE = CURLINFO_RESPONSE_CODE;
case HTTP_CONNECTCODE = CURLINFO_HTTP_CONNECTCODE;
case HTTPAUTH_AVAIL = CURLINFO_HTTPAUTH_AVAIL;
case PROXYAUTH_AVAIL = CURLINFO_PROXYAUTH_AVAIL;
case OS_ERRNO = CURLINFO_OS_ERRNO;
case NUM_CONNECTS = CURLINFO_NUM_CONNECTS;
case SSL_ENGINES = CURLINFO_SSL_ENGINES;
case COOKIELIST = CURLINFO_COOKIELIST;
case FTP_ENTRY_PATH = CURLINFO_FTP_ENTRY_PATH;
case APPCONNECT_TIME = CURLINFO_APPCONNECT_TIME;
case CERTINFO = CURLINFO_CERTINFO;
case CONDITION_UNMET = CURLINFO_CONDITION_UNMET;
case RTSP_CLIENT_CSEQ = CURLINFO_RTSP_CLIENT_CSEQ;
case RTSP_CSEQ_RECV = CURLINFO_RTSP_CSEQ_RECV;
case RTSP_SERVER_CSEQ = CURLINFO_RTSP_SERVER_CSEQ;
case RTSP_SESSION_ID = CURLINFO_RTSP_SESSION_ID;
case CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_CONTENT_LENGTH_DOWNLOAD_T;
case CONTENT_LENGTH_UPLOAD_T = CURLINFO_CONTENT_LENGTH_UPLOAD_T;
case HTTP_VERSION = CURLINFO_HTTP_VERSION;
case PROTOCOL = CURLINFO_PROTOCOL;
case PROXY_SSL_VERIFYRESULT = CURLINFO_PROXY_SSL_VERIFYRESULT;
case SCHEME = CURLINFO_SCHEME;
case SIZE_DOWNLOAD_T = CURLINFO_SIZE_DOWNLOAD_T;
case SIZE_UPLOAD_T = CURLINFO_SIZE_UPLOAD_T;
case SPEED_DOWNLOAD_T = CURLINFO_SPEED_DOWNLOAD_T;
case SPEED_UPLOAD_T = CURLINFO_SPEED_UPLOAD_T;
case APPCONNECT_TIME_T = CURLINFO_APPCONNECT_TIME_T;
case CONNECT_TIME_T = CURLINFO_CONNECT_TIME_T;
case FILETIME_T = CURLINFO_FILETIME_T;
case NAMELOOKUP_TIME_T = CURLINFO_NAMELOOKUP_TIME_T;
case PRETRANSFER_TIME_T = CURLINFO_PRETRANSFER_TIME_T;
case REDIRECT_TIME_T = CURLINFO_REDIRECT_TIME_T;
case STARTTRANSFER_TIME_T = CURLINFO_STARTTRANSFER_TIME_T;
case TOTAL_TIME_T = CURLINFO_TOTAL_TIME_T;
}

@ -0,0 +1,176 @@
<?php declare(strict_types=1);
namespace massivedynamic\curl;
enum Option : int {
case AUTOREFERER = CURLOPT_AUTOREFERER;
case COOKIESESSION = CURLOPT_COOKIESESSION;
case DOH_URL = CURLOPT_DOH_URL;
case DNS_USE_GLOBAL_CACHE = CURLOPT_DNS_USE_GLOBAL_CACHE;
case DNS_CACHE_TIMEOUT = CURLOPT_DNS_CACHE_TIMEOUT;
case PRIVATE = CURLOPT_PRIVATE;
case FTPSSLAUTH = CURLOPT_FTPSSLAUTH;
case PORT = CURLOPT_PORT;
case FILE = CURLOPT_FILE;
case INFILE = CURLOPT_INFILE;
case INFILESIZE = CURLOPT_INFILESIZE;
case ISSUERCERT_BLOB = CURLOPT_ISSUERCERT_BLOB;
case URL = CURLOPT_URL;
case PROXY = CURLOPT_PROXY;
case PROXY_ISSUERCERT = CURLOPT_PROXY_ISSUERCERT;
case PROXY_ISSUERCERT_BLOB = CURLOPT_PROXY_ISSUERCERT_BLOB;
case PROXY_SSLCERT_BLOB = CURLOPT_PROXY_SSLCERT_BLOB;
case PROXY_SSLKEY_BLOB = CURLOPT_PROXY_SSLKEY_BLOB;
case VERBOSE = CURLOPT_VERBOSE;
case HEADER = CURLOPT_HEADER;
case HTTPHEADER = CURLOPT_HTTPHEADER;
case NOPROGRESS = CURLOPT_NOPROGRESS;
case NOBODY = CURLOPT_NOBODY;
case FAILONERROR = CURLOPT_FAILONERROR;
case UPLOAD = CURLOPT_UPLOAD;
case POST = CURLOPT_POST;
case FTPLISTONLY = CURLOPT_FTPLISTONLY;
case FTPAPPEND = CURLOPT_FTPAPPEND;
case FTP_CREATE_MISSING_DIRS = CURLOPT_FTP_CREATE_MISSING_DIRS;
case NETRC = CURLOPT_NETRC;
case FOLLOWLOCATION = CURLOPT_FOLLOWLOCATION;
case PUT = CURLOPT_PUT;
case USERPWD = CURLOPT_USERPWD;
case PROXYUSERPWD = CURLOPT_PROXYUSERPWD;
case RANGE = CURLOPT_RANGE;
case TIMEOUT = CURLOPT_TIMEOUT;
case TIMEOUT_MS = CURLOPT_TIMEOUT_MS;
case TCP_NODELAY = CURLOPT_TCP_NODELAY;
case POSTFIELDS = CURLOPT_POSTFIELDS;
case PROGRESSFUNCTION = CURLOPT_PROGRESSFUNCTION;
case REFERER = CURLOPT_REFERER;
case USERAGENT = CURLOPT_USERAGENT;
case FTPPORT = CURLOPT_FTPPORT;
case FTP_USE_EPSV = CURLOPT_FTP_USE_EPSV;
case LOW_SPEED_LIMIT = CURLOPT_LOW_SPEED_LIMIT;
case LOW_SPEED_TIME = CURLOPT_LOW_SPEED_TIME;
case RESUME_FROM = CURLOPT_RESUME_FROM;
case COOKIE = CURLOPT_COOKIE;
case COOKIELIST = CURLOPT_COOKIELIST;
case SSLCERT = CURLOPT_SSLCERT;
case SSLCERT_BLOB = CURLOPT_SSLCERT_BLOB;
case SSLCERTPASSWD = CURLOPT_SSLCERTPASSWD;
case SSLKEY_BLOB = CURLOPT_SSLKEY_BLOB;
case WRITEHEADER = CURLOPT_WRITEHEADER;
case SSL_VERIFYHOST = CURLOPT_SSL_VERIFYHOST;
case COOKIEFILE = CURLOPT_COOKIEFILE;
case SSLVERSION = CURLOPT_SSLVERSION;
case TIMECONDITION = CURLOPT_TIMECONDITION;
case TIMEVALUE = CURLOPT_TIMEVALUE;
case CUSTOMREQUEST = CURLOPT_CUSTOMREQUEST;
case STDERR = CURLOPT_STDERR;
case TRANSFERTEXT = CURLOPT_TRANSFERTEXT;
case RETURNTRANSFER = CURLOPT_RETURNTRANSFER;
case QUOTE = CURLOPT_QUOTE;
case POSTQUOTE = CURLOPT_POSTQUOTE;
case INTERFACE = CURLOPT_INTERFACE;
case KRB4LEVEL = CURLOPT_KRB4LEVEL;
case HTTPPROXYTUNNEL = CURLOPT_HTTPPROXYTUNNEL;
case FILETIME = CURLOPT_FILETIME;
case WRITEFUNCTION = CURLOPT_WRITEFUNCTION;
case READFUNCTION = CURLOPT_READFUNCTION;
case HEADERFUNCTION = CURLOPT_HEADERFUNCTION;
case MAXREDIRS = CURLOPT_MAXREDIRS;
case MAXCONNECTS = CURLOPT_MAXCONNECTS;
case FRESH_CONNECT = CURLOPT_FRESH_CONNECT;
case FORBID_REUSE = CURLOPT_FORBID_REUSE;
case RANDOM_FILE = CURLOPT_RANDOM_FILE;
case EGDSOCKET = CURLOPT_EGDSOCKET;
case CONNECTTIMEOUT = CURLOPT_CONNECTTIMEOUT;
case CONNECTTIMEOUT_MS = CURLOPT_CONNECTTIMEOUT_MS;
case SSL_VERIFYPEER = CURLOPT_SSL_VERIFYPEER;
case CAINFO = CURLOPT_CAINFO;
case CAPATH = CURLOPT_CAPATH;
case COOKIEJAR = CURLOPT_COOKIEJAR;
case SSL_CIPHER_LIST = CURLOPT_SSL_CIPHER_LIST;
case NOSIGNAL = CURLOPT_NOSIGNAL;
case PROXYTYPE = CURLOPT_PROXYTYPE;
case BUFFERSIZE = CURLOPT_BUFFERSIZE;
case HTTPGET = CURLOPT_HTTPGET;
case HTTP_VERSION = CURLOPT_HTTP_VERSION;
case SSLKEY = CURLOPT_SSLKEY;
case SSLKEYTYPE = CURLOPT_SSLKEYTYPE;
case SSLENGINE = CURLOPT_SSLENGINE;
case SSLENGINE_DEFAULT = CURLOPT_SSLENGINE_DEFAULT;
case SSLCERTTYPE = CURLOPT_SSLCERTTYPE;
case CRLF = CURLOPT_CRLF;
case ENCODING = CURLOPT_ENCODING;
case PROXYPORT = CURLOPT_PROXYPORT;
case UNRESTRICTED_AUTH = CURLOPT_UNRESTRICTED_AUTH;
case FTP_USE_EPRT = CURLOPT_FTP_USE_EPRT;
case HTTP200ALIASES = CURLOPT_HTTP200ALIASES;
case HTTPAUTH = CURLOPT_HTTPAUTH;
case PROXYAUTH = CURLOPT_PROXYAUTH;
case MAX_RECV_SPEED_LARGE = CURLOPT_MAX_RECV_SPEED_LARGE;
case MAX_SEND_SPEED_LARGE = CURLOPT_MAX_SEND_SPEED_LARGE;
case HEADEROPT = CURLOPT_HEADEROPT;
case PROXYHEADER = CURLOPT_PROXYHEADER;
case SSH_AUTH_TYPES = CURLOPT_SSH_AUTH_TYPES;
case SSH_HOST_PUBLIC_KEY_MD5 = CURLOPT_SSH_HOST_PUBLIC_KEY_MD5;
case SSH_PRIVATE_KEYFILE = CURLOPT_SSH_PRIVATE_KEYFILE;
case SSH_PUBLIC_KEYFILE = CURLOPT_SSH_PUBLIC_KEYFILE;
case SSL_OPTIONS = CURLOPT_SSL_OPTIONS;
case USERNAME = CURLOPT_USERNAME;
case SASL_IR = CURLOPT_SASL_IR;
case DNS_INTERFACE = CURLOPT_DNS_INTERFACE;
case DNS_LOCAL_IP4 = CURLOPT_DNS_LOCAL_IP4;
case DNS_LOCAL_IP6 = CURLOPT_DNS_LOCAL_IP6;
case XOAUTH2_BEARER = CURLOPT_XOAUTH2_BEARER;
case LOGIN_OPTIONS = CURLOPT_LOGIN_OPTIONS;
case EXPECT_100_TIMEOUT_MS = CURLOPT_EXPECT_100_TIMEOUT_MS;
case SSL_ENABLE_ALPN = CURLOPT_SSL_ENABLE_ALPN;
case SSL_ENABLE_NPN = CURLOPT_SSL_ENABLE_NPN;
case PINNEDPUBLICKEY = CURLOPT_PINNEDPUBLICKEY;
case UNIX_SOCKET_PATH = CURLOPT_UNIX_SOCKET_PATH;
case SSL_VERIFYSTATUS = CURLOPT_SSL_VERIFYSTATUS;
case PATH_AS_IS = CURLOPT_PATH_AS_IS;
case SSL_FALSESTART = CURLOPT_SSL_FALSESTART;
case PIPEWAIT = CURLOPT_PIPEWAIT;
case PROXY_SERVICE_NAME = CURLOPT_PROXY_SERVICE_NAME;
case SERVICE_NAME = CURLOPT_SERVICE_NAME;
case DEFAULT_PROTOCOL = CURLOPT_DEFAULT_PROTOCOL;
case STREAM_WEIGHT = CURLOPT_STREAM_WEIGHT;
case TFTP_NO_OPTIONS = CURLOPT_TFTP_NO_OPTIONS;
case CONNECT_TO = CURLOPT_CONNECT_TO;
case TCP_FASTOPEN = CURLOPT_TCP_FASTOPEN;
case TCP_KEEPALIVE = CURLOPT_TCP_KEEPALIVE;
case TCP_KEEPIDLE = CURLOPT_TCP_KEEPIDLE;
case TCP_KEEPINTVL = CURLOPT_TCP_KEEPINTVL;
case REQUEST_TARGET = CURLOPT_REQUEST_TARGET;
case ABSTRACT_UNIX_SOCKET = CURLOPT_ABSTRACT_UNIX_SOCKET;
case KEEP_SENDING_ON_ERROR = CURLOPT_KEEP_SENDING_ON_ERROR;
case PRE_PROXY = CURLOPT_PRE_PROXY;
case PROXY_CAINFO = CURLOPT_PROXY_CAINFO;
case PROXY_CAPATH = CURLOPT_PROXY_CAPATH;
case PROXY_CRLFILE = CURLOPT_PROXY_CRLFILE;
case PROXY_KEYPASSWD = CURLOPT_PROXY_KEYPASSWD;
case PROXY_PINNEDPUBLICKEY = CURLOPT_PROXY_PINNEDPUBLICKEY;
case PROXY_SSLCERT = CURLOPT_PROXY_SSLCERT;
case PROXY_SSLCERTTYPE = CURLOPT_PROXY_SSLCERTTYPE;
case PROXY_SSL_CIPHER_LIST = CURLOPT_PROXY_SSL_CIPHER_LIST;
case PROXY_SSLKEY = CURLOPT_PROXY_SSLKEY;
case PROXY_SSLKEYTYPE = CURLOPT_PROXY_SSLKEYTYPE;
case PROXY_SSL_OPTIONS = CURLOPT_PROXY_SSL_OPTIONS;
case PROXY_SSL_VERIFYHOST = CURLOPT_PROXY_SSL_VERIFYHOST;
case PROXY_SSL_VERIFYPEER = CURLOPT_PROXY_SSL_VERIFYPEER;
case PROXY_SSLVERSION = CURLOPT_PROXY_SSLVERSION;
case PROXY_TLSAUTH_PASSWORD = CURLOPT_PROXY_TLSAUTH_PASSWORD;
case PROXY_TLSAUTH_TYPE = CURLOPT_PROXY_TLSAUTH_TYPE;
case PROXY_TLSAUTH_USERNAME = CURLOPT_PROXY_TLSAUTH_USERNAME;
case SOCKS5_AUTH = CURLOPT_SOCKS5_AUTH;
case SUPPRESS_CONNECT_HEADERS = CURLOPT_SUPPRESS_CONNECT_HEADERS;
case DISALLOW_USERNAME_IN_URL = CURLOPT_DISALLOW_USERNAME_IN_URL;
case DNS_SHUFFLE_ADDRESSES = CURLOPT_DNS_SHUFFLE_ADDRESSES;
case HAPPY_EYEBALLS_TIMEOUT_MS = CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS;
case HAPROXYPROTOCOL = CURLOPT_HAPROXYPROTOCOL;
case PROXY_TLS13_CIPHERS = CURLOPT_PROXY_TLS13_CIPHERS;
case SSH_COMPRESSION = CURLOPT_SSH_COMPRESSION;
case TIMEVALUE_LARGE = CURLOPT_TIMEVALUE_LARGE;
case TLS13_CIPHERS = CURLOPT_TLS13_CIPHERS;
case HTTP09_ALLOWED = CURLOPT_HTTP09_ALLOWED;
}

@ -0,0 +1,12 @@
<?php declare(strict_types=1);
namespace massivedynamic\curl;
enum Pause : int {
case ALL = CURLPAUSE_ALL;
case CONT = CURLPAUSE_CONT;
case RECV = CURLPAUSE_RECV;
case RECV_CONT = CURLPAUSE_RECV_CONT;
case SEND = CURLPAUSE_SEND;
case SEND_CONT = CURLPAUSE_SEND_CONT;
}
Loading…
Cancel
Save