libcurl客户端发送https请求

客户端只需要将url由http变成https

如果服务端不是CA认证,那么会请求失败,需要加上两行代码,不是CA认证也正常访问

    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);

详细代码如下:

bool login(char *username, char *passwd)
{
// packet username and password to json
/*
    {
        username: "aaa",
        password: "bbb",
        logintype: 1
    }
*/
    cJSON* root = cJSON_CreateObject();

    cJSON_AddStringToObject(root, "username", username);
    cJSON_AddStringToObject(root, "password", passwd);
    cJSON_AddNumberToObject(root, "logintype", 1);

    char *json_str = cJSON_Print(root);
    cJSON_Delete(root);

    //curl
    CURLcode curl_ret;
    CURL *curl = curl_easy_init();
    curl_response_data_t res_data;
    const char *uri = "https://192.168.2.113:8080/login";

    //http://127.0.0.1:8080/login
    curl_easy_setopt(curl, CURLOPT_URL, uri);
    curl_easy_setopt(curl, CURLOPT_POST, 1);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_str);

    //取消SSL非法认证错误
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);

    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_login_callback);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &res_data);

    curl_ret = curl_easy_perform(curl);
    if (curl_ret != CURLE_OK) {
        __android_log_print(ANDROID_LOG_ERROR, "login", "curl perform error, ret=%d\n", curl_ret);
        return false;
    }
    curl_easy_cleanup(curl);

    res_data.data[res_data.datalen] = '\0';
    free(json_str);


    //login end, server response json data in res_data
    //parse json

    /*
       //成功
       {
            result: "ok",
            sessionid: "xxxxxxxx"
        }
        //失败
        {
            result: "error",
            reason: "why...."
        }
    */

    root = cJSON_Parse(res_data.data);
    cJSON* result = cJSON_GetObjectItem(root, "result");
    if (result && (strcmp(result->valuestring, "ok") == 0) ) {
        //succ!
        cJSON* sessionid = cJSON_GetObjectItem(root, "sessionid");

        __android_log_print(ANDROID_LOG_ERROR, "login", "login succ, sid=%s\n", sessionid->valuestring);

        return true;
    }
    else {
        //fail
        cJSON *reason = cJSON_GetObjectItem(root, "reason") ;
        if (reason) {
            __android_log_print(ANDROID_LOG_ERROR, "login", "login fail, reason=%s\n", reason->string);
        }
        else {
            __android_log_print(ANDROID_LOG_ERROR, "login", "login fail, unknow reason\n");
        }
    }



    cJSON_Delete(root);



    return true;
}

results matching ""

    No results matching ""