Last active
December 21, 2016 00:19
-
-
Save dmcyk/5aceebcbe4b4117c9806c1cb01a8e205 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import SwiftyCurl | |
| import Foundation | |
| import CCurl | |
| ///// SwiftyCurl | |
| var request = cURLRequest(url: URL(string: "https://jsonplaceholder.typicode.com/posts")!, | |
| method: .get) | |
| request.contentType = .json | |
| let connection = cURLConnection(useSSL: true) | |
| do { | |
| let res = try connection.request(request) | |
| dump(res.headers) | |
| if let body: String = res.body() { | |
| print("\nBody:\n") | |
| print(body) | |
| } | |
| } catch { | |
| dump(error) | |
| } | |
| ///// raw curl - that's a simple GET request, | |
| ///// POST etc would require even more code to setup request's body | |
| // basic SSL setup | |
| let rawcon = curl_easy_init() | |
| curlHelperSetOptString(rawcon, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts") | |
| curlHelperSetOptInt(rawcon, CURLOPT_SSL_VERIFYHOST, 2) | |
| curlHelperSetOptBool(rawcon, CURLOPT_USE_SSL, CURL_TRUE) | |
| curlHelperSetOptBool(rawcon, CURLOPT_SSLENGINE_DEFAULT, CURL_TRUE) | |
| curlHelperSetOptBool(rawcon, CURLOPT_HTTPGET, CURL_TRUE) | |
| // json header | |
| let headers = ["Accept": "application/json"] | |
| let rawHeaders = headers.map { | |
| return "\($0.key): \($0.value)" | |
| } | |
| var slist: UnsafeMutablePointer<curl_slist>? = nil | |
| rawHeaders.forEach { | |
| slist = curl_slist_append(slist, $0) | |
| } | |
| curlHelperSetOptList(rawcon, CURLOPT_HTTPHEADER, slist) | |
| // header, body buffers | |
| var headerBuff = Data(count: 0) | |
| var bodyBuff = Data(count: 0) | |
| var headerPointer = withUnsafeMutablePointer(to: &headerBuff) { $0 } | |
| var bodyPointer = withUnsafeMutablePointer(to: &bodyBuff) { $0 } | |
| curlHelperSetOptVoid(rawcon, CURLOPT_HEADERDATA, headerPointer) | |
| curlHelperSetOptVoid(rawcon, CURLOPT_WRITEDATA, bodyPointer) | |
| curlHelperSetOptFunc(rawcon, CURLOPT_WRITEFUNCTION) { (data, size, nmemb, userData) -> Int in | |
| if nmemb > 0, let response = userData?.assumingMemoryBound(to: Data.self), | |
| let characters = data?.assumingMemoryBound(to: UInt8.self) { | |
| response.pointee.append(characters, count: nmemb) | |
| } | |
| return size * nmemb | |
| } | |
| curlHelperSetOptFunc(rawcon, CURLOPT_HEADERFUNCTION) { (data, size, nmemb, userData) -> Int in | |
| if nmemb > 0, let response = userData?.assumingMemoryBound(to: Data.self), | |
| let characters = data?.assumingMemoryBound(to: UInt8.self) { | |
| response.pointee.append(characters, count: nmemb) | |
| } | |
| return size * nmemb | |
| } | |
| let start = curl_easy_perform(rawcon) | |
| if start != CURLE_OK { | |
| print(String(cString: curl_easy_strerror(start))) | |
| } else { | |
| // Headers in curl are simply separated by \r\n | |
| // SwiftyCurl takes care of that and headers are in an array \ | |
| // with already trimmed \r\n (trimming is optional) | |
| dump(String(data: headerBuff, encoding: .utf8)) | |
| print("\nBody:\n") | |
| if let body = String(data: bodyBuff, encoding: .utf8) { | |
| print(body) | |
| } else { | |
| print("No body :c") | |
| } | |
| } | |
| curl_slist_free_all(slist) | |
| curl_easy_cleanup(rawcon) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment