public function __construct(array $config = array())
{
$defaults = array('method' => 'GET', 'query' => array(), 'cookies' => array(), 'type' => null, 'auth' => null, 'proxy' => null, 'ignoreErrors' => true, 'followLocation' => true);
$config += $defaults;
$this->method = $config['method'];
$this->query = $config['query'];
$this->auth = $config['auth'];
parent::__construct($config);
$this->headers = array('Host' => $this->port ? "{$this->host}:{$this->port}" : $this->host, 'Connection' => 'Close', 'User-Agent' => 'Mozilla/5.0');
foreach (array('type', 'headers', 'cookies') as $field) {
if ($value = $this->_config[$field]) {
$this->{$field}($value);
}
}
if ($cookies = $this->headers('Cookie')) {
$this->_parseCookies($cookies);
}
$this->_formats += array('url' => function ($req, $options) {
$options['port'] = $options['port'] ? ":{$options['port']}" : '';
$options['path'] = str_replace('//', '/', $options['path']);
return String::insert("{:scheme}://{:host}{:port}{:path}{:query}", $options);
}, 'context' => function ($req, $options, $defaults) {
$req->headers($options['headers']);
return array('http' => array_diff_key($options, $defaults) + array('content' => $req->body(), 'method' => $options['method'], 'header' => $req->headers(), 'protocol_version' => $options['version'], 'ignore_errors' => $options['ignore_errors'], 'follow_location' => $options['follow_location'], 'request_fulluri' => $options['request_fulluri'], 'proxy' => $options['proxy']));
}, 'string' => function ($req, $options) {
$body = $req->body();
$path = str_replace('//', '/', $options['path']) . $options['query'];
$status = "{$options['method']} {$path} {$req->protocol}";
return join("\r\n", array($status, join("\r\n", $req->headers()), "", $body));
});
}