/**
  * Given an error, this tries to guess the cause and throw an exception.
  *
  * Stream wrappers do not deal with error conditions gracefully. (For starters,
  * during an error one cannot access the HTTP headers). The only useful piece
  * of data given is the contents of the last error buffer.
  *
  * This uses the contents of that buffer to attempt to learn what happened
  * during the request. It then throws an exception that seems appropriate for the
  * given context.
  */
 protected function guessError($err, $uri, $method)
 {
     $regex = '/HTTP\\/1\\.[01]? ([0-9]+) ([ a-zA-Z]+)/';
     $matches = array();
     preg_match($regex, $err, $matches);
     if (count($matches) < 3) {
         throw new \HPCloud\Exception($err);
     }
     Response::failure($matches[1], $matches[0], $uri, $method);
 }