How to access libcurl? How to access libcurl? How do I save data to a sandbox path

The first requirement is that because libcurl is available only from source code, you need to compile the library for each platform. Libcurl +OpenSSL (HTTPS IPv6) for iOS Remember to reference libz. TBD and libresolv. TBD in the Link binary with ibraries in Build Phase

Second requirement, the method of initiating the request is as follows

bool getUrl(const char *filename,char *url)
{
    CURL *curl;
    CURLcode res;
    FILE *fp;
    if ((fp = fopen(filename, "wt+")) == NULL){// The result is stored in a filereturn false; } struct curl_slist *headers = NULL; // add HTTP headers = curl_slist_append(headers,"Accept:application/json");
    headers = curl_slist_append(headers, "Content-Type:application/json");
    headers = curl_slist_append(headers, "charset:utf-8"); curl = curl_easy_init(); / / initializationif(curl) { curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); Curl_easy_setopt (curl, CURLOPT_URL,url) curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); res = curl_easy_perform(curl); / / execution NSLog (@"Request return value is % I",res);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    fclose(fp);
    return true;
}
Copy the code

Curl_global_init (CURL_GLOBAL_ALL); This function is a global initializer and can only be called once, so it is best to call it in didFinishLanuch, if curl_easy_init(); Libcurl is automatically executed once if it has not been implemented before. Therefore, it is best to call this function actively in multiple threads to prevent multiple calls when curl_easy_init is in the thread. This is because libcurl is thread-safe, but curl_global_init is not thread-safe, so do not call curl_global_init once in didFinishLanuch.

Curl_easy_setopt (curl, CURLOPT_WRITEDATA, FP); This method is a c method, so filename should be a C String.

NSArray *paths =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [paths firstObject];
NSString *filePath = [documentPath stringByAppendingPathComponent:@"wow.log"];
getUrl([filePath cStringUsingEncoding:NSUTF8StringEncoding],"https://www.baidu.com");
Copy the code

This allows you to write the captured data to your app’s Document directory as a wow.log file.

Curl_easy_perform (); curl_easy_perform()

CURLE_OK = 0, 0: no error 
CURLE_UNSUPPORTED_PROTOCOL, 1: unsupported protocol 
CURLE_FAILED_INIT, 2: failed init 
CURLE_URL_MALFORMAT, 3: URL using bad/illegal format or missing URL 
CURLE_URL_MALFORMAT_USER, 4: unknown error 
CURLE_COULDNT_RESOLVE_PROXY, 5: couldn't resolve proxy name CURLE_COULDNT_RESOLVE_HOST, 6: couldn't resolve host name 
CURLE_COULDNT_CONNECT, 7: couldn't connect to server CURLE_FTP_WEIRD_SERVER_REPLY, 8: FTP: weird server reply CURLE_FTP_ACCESS_DENIED, CURLE_FTP_USER_PASSWORD_INCORRECT, 10: unknown error CURLE_FTP_WEIRD_PASS_REPLY, 11: FTP: unknown PASS reply CURLE_FTP_WEIRD_USER_REPLY, 12: FTP: unknown USER reply CURLE_FTP_WEIRD_PASV_REPLY, 13: FTP: unknown PASV reply CURLE_FTP_WEIRD_227_FORMAT, 14: FTP: unknown 227 response format CURLE_FTP_CANT_GET_HOST, 15: FTP: can't figure out the host in the PASV response 
CURLE_FTP_CANT_RECONNECT, 16: FTP: can't connect to server the response code is unknown CURLE_FTP_COULDNT_SET_BINARY, 17: FTP: couldn't set binary mode 
CURLE_PARTIAL_FILE, 18: Transferred a partial file 
CURLE_FTP_COULDNT_RETR_FILE, 19: FTP: couldn't retrieve (RETR failed) the specified file 
CURLE_FTP_WRITE_ERROR, 20: FTP: the post-transfer acknowledge response was not OK 
CURLE_FTP_QUOTE_ERROR, 21: FTP: a quote command returned error 
CURLE_HTTP_RETURNED_ERROR, 22: HTTP response code said error 
CURLE_WRITE_ERROR, 23: failed writing received data to disk/application 
CURLE_MALFORMAT_USER, 24: unknown error 
CURLE_UPLOAD_FAILED, 25: upload failed (at start/before it took off) 
CURLE_READ_ERROR, 26: failed to open/read local data from file/application 
CURLE_OUT_OF_MEMORY, 27: out of memory 

CURLE_OPERATION_TIMEOUTED, 28: a timeout was reached 
CURLE_FTP_COULDNT_SET_ASCII, 29: FTP could not set ASCII mode (TYPE A) 
CURLE_FTP_PORT_FAILED, 30: FTP command PORT failed 
CURLE_FTP_COULDNT_USE_REST, 31: FTP command REST failed 
CURLE_FTP_COULDNT_GET_SIZE, 32: FTP command SIZE failed 
CURLE_HTTP_RANGE_ERROR, 33: a range was requested but the server did not deliver it 
CURLE_HTTP_POST_ERROR, 34: internal problem setting up the POST 
CURLE_SSL_CONNECT_ERROR, 35: SSL connect error 
CURLE_BAD_DOWNLOAD_RESUME, 36: couldn't resume download 
CURLE_FILE_COULDNT_READ_FILE, 37: couldn't read a file:// file CURLE_LDAP_CANNOT_BIND, 38: LDAP: cannot bind CURLE_LDAP_SEARCH_FAILED, 39: LDAP: search failed CURLE_LIBRARY_NOT_FOUND, 40: a required shared library was not foundCopy the code

If you don’t need to write locally, but just want to make a request, that’s fine

CURLcode getUrl(char *url) { CURL *curl; CURLcode res = CURLE_OK; struct curl_slist *headers = NULL; // add HTTP headers = curl_slist_append(headers,"Accept:application/json");
    headers = curl_slist_append(headers, "Content-Type:application/json");
    headers = curl_slist_append(headers, "charset:utf-8"); curl = curl_easy_init(); / / initializationif(curl) { curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); Curl_easy_setopt (curl, CURLOPT_URL,url) res = curl_easy_perform(curl); / / execution NSLog (@"res===%i",res);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return res;
}
Copy the code

To call it, use getUrl(“https://www.baidu.com”); Finished work