Overview

Namespaces

  • Net
    • Bazzline
      • Component
        • CommandCollection
          • Filesystem
          • Http
          • Process
          • Vcs

Classes

  • Net\Bazzline\Component\CommandCollection\Filesystem\Copy
  • Net\Bazzline\Component\CommandCollection\Filesystem\Create
  • Net\Bazzline\Component\CommandCollection\Filesystem\ListSource
  • Net\Bazzline\Component\CommandCollection\Filesystem\Move
  • Net\Bazzline\Component\CommandCollection\Filesystem\Remove
  • Net\Bazzline\Component\CommandCollection\Filesystem\Unzip
  • Net\Bazzline\Component\CommandCollection\Filesystem\Zip
  • Net\Bazzline\Component\CommandCollection\Http\Curl
  • Net\Bazzline\Component\CommandCollection\Process\ProcessSnapshot
  • Net\Bazzline\Component\CommandCollection\Vcs\Git
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 
<?php
/**
 * @author stev leibelt <artodeto@bazzline.net>
 * @since 2015-09-12
 */
namespace Net\Bazzline\Component\CommandCollection\Http;

use Net\Bazzline\Component\Command\AbstractCommand;
use Net\Bazzline\Component\Command\InvalidSystemEnvironmentException;
use Net\Bazzline\Component\Command\RuntimeException;

class Curl extends AbstractCommand
{
    /** @var string */
    private $prefix = '';

    /** @var bool */
    private $isJson = false;

    /**
     * @param string $url
     * @param string $method
     * @param null|mixed $data
     * @return array
     * @throws RuntimeException
     */
    public function __invoke($url, $method, $data = null)
    {
        return $this->send($url, $method, $data);
    }


    public function beSilent()
    {
        $this->prefix .= ' -s';
    }

    public function isJson()
    {
        $this->isJson   = true;
        $this->prefix  .= ' -H "Accept: application/json" -H "Content-Type: application/json"';
    }

    public function noSslSecurity()
    {
        $this->prefix .= ' --insecure';
    }

    public function noSslRevoke()
    {
        $this->prefix .= ' --ssl-no-revoke';
    }

    /**
     * @param string $header
     */
    public function addHeader($header)
    {
        $this->prefix .= ' -H "' . $header . '"';
    }

    /**
     * @param string $host
     * @param string $url
     * @param null|mixed $data
     * @return array
     */
    public function delete($host, $url, $data = null)
    {
        return $this->send($host, $url, 'DELETE', $data);
    }

    /**
     * @param string $host
     * @param string $url
     * @return array
     */
    public function get($host, $url)
    {
        return $this->send($host, $url, 'GET');
    }

    /**
     * @param string $host
     * @param string $url
     * @param null|mixed $data
     * @return array
     */
    public function post($host, $url, $data = null)
    {
        return $this->send($host, $url, 'POST', $data);
    }

    /**
     * @param string $host
     * @param string $url
     * @param null|mixed $data
     * @return array
     */
    public function put($host, $url, $data = null)
    {
        return $this->send($host, $url, 'PUT', $data);
    }

    /**
     * @param string $host
     * @param string $url
     * @param string $method
     * @param null|mixed $data
     * @return array
     * @throws RuntimeException
     * @todo implement parameter validation
     * @todo add noUrlEncode option
     */
    public function send($host, $url, $method, $data = null)
    {
        $arguments  = $this->prefix;
        $command    = '/usr/bin/curl';
        $content    = '';
        $target     = $host . str_replace('%2F', '/', urlencode($url));

        if (!is_null($data)) {
            if ($this->isJson) {
                $content .= ' -d \'' . json_encode($data) . '\'';
            } else {
                if (is_array($data)) {
                    foreach ($data as $key => $value) {
                        $content .= ' -d ' . $key . '="' . $value . '"';
                    }
                } else {
                    $content .= ' -d ' . $data;
                }
            }
        }

        $command       .= $arguments . ' -X ' . $method . $content . ' ' . $target;
        $this->isJson   = true;
        $this->prefix   = '';

        return $this->execute($command);
    }

    /**
     * @throws InvalidSystemEnvironmentException
     */
    public function validateSystemEnvironment()
    {
        if (!is_executable('/usr/bin/curl')) {
            throw new InvalidSystemEnvironmentException(
                '/usr/bin/curl is mandatory'
            );
        }
    }
}
PHP Command Collection Component by bazzline.net API documentation generated by ApiGen