         task.resume()
     }
     
-    func request(url: String, callback: ((err: NSError?, response: NSHTTPURLResponse?, body: AnyObject?)->())? = nil) {
+    public func request(url: String, callback: ((err: NSError?, response: NSHTTPURLResponse?, body: AnyObject?)->())? = nil) {
         request(["url" : url ], callback: callback )
     }
 
+    private func dictToQueryString(data: [String: String]) -> String {
+        var qs = ""
+        for (key, value) in data {
+            qs += "\(key)=\(value)&"
+        }
+        return qs
+    }
 }

        }
        
        // is there a more efficient way to do this?
        if( options["auth"] && (options["auth"] as Dictionary<String,String>).count > 0) {
            var auth = options["auth"] as Dictionary<String,String>
            if( auth["username"] && auth["password"] ) {
                var username = auth["username"]
                var password = auth["password"]

    }
    
    // GET requests
    public func get(url: String, auth: [String: String] = [String: String](), params: [String: String] = [String: String](), callback: ((err: NSError?, response: NSHTTPURLResponse?, body: AnyObject?)->())? = nil) {
        var qs = dictToQueryString(params)
        request(["url" : url, "auth" : auth, "querystring": qs ], callback: callback )
    }
    
    // POST requests
    public func post(url: String, data: [String: String] = [String: String](), auth: [String: String] = [String: String](), callback: ((err: NSError?, response: NSHTTPURLResponse?, body: AnyObject?)->())? = nil) {
        var qs = dictToQueryString(data)
        request(["url": url, "method" : "POST", "body" : qs, "auth" : auth] , callback)
    }
    
    // Actually make the requests
    public func request(options: [String: Any], callback: ((err: NSError?, response: NSHTTPURLResponse?, body: AnyObject?)->())?) {
        if( !options["url"] ) { return }
        
        var urlString = options["url"] as String
