ESP32 Http 开发

1、http 协议

https://www.cnblogs.com/an-wen/p/11180076.html

2、esp32 开发

http相关参考demo:

esp-idf/example/protocols/https_request/https_request_example_main.c

esp-idf/example/protocols/esp_http_client/esp_http_client_example.c (只有get接口)

3、关键代码

截取酷狗开发的关键代码,供参考。

在线http测试工具:

https://www.sojson.com/http/test.html 


esp_err_t kugou_event_handler(esp_http_client_event_t *evt)
{

    switch(evt->event_id) {
        case HTTP_EVENT_ERROR:
            ESP_LOGI(TAG, "HTTP_EVENT_ERROR");
            break;
        case HTTP_EVENT_ON_CONNECTED:
            ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED");
            break;
        case HTTP_EVENT_HEADER_SENT:
            ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT");
            break;
        case HTTP_EVENT_ON_HEADER:
            ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);
            break;
        case HTTP_EVENT_ON_DATA:
            ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);

            if (!esp_http_client_is_chunked_response(evt->client)) {
                // Write out data
                printf("%.*s\n", evt->data_len, (char*)evt->data);
            }
            memcpy(evt->user_data+output_index, evt->data, evt->data_len);
            output_index += evt->data_len;

            break;

        case HTTP_EVENT_ON_FINISH:
            ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH");
            printf("lyh add -> recv from KUGOU: %s\n", (char *)evt->user_data);
            output_index = 0;

            base_start_tmr(base_tmr_hdl, &tmr_kugou, https_respond_handler, 10/portTICK_PERIOD_MS);
            // https_respond_handler((char *)evt->user_data);

            break;
        case HTTP_EVENT_DISCONNECTED:
            ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED");
            break;
    }
    return ESP_OK;
}
esp_err_t https_post_msg(const char *http_url, char *request, char *md5)
{
    esp_err_t err = ESP_OK;

    esp_event_loop_create_default();

    esp_http_client_config_t config = {
        .url = http_url,
        .event_handler = kugou_event_handler,
        .user_data = output_buf,  //数据返回存储空间,需要自己malloc开辟
        // .url = HTTP_URL,
        // .cert_pem = howsmyssl_com_root_cert_pem_start,
    };

    esp_http_client_handle_t client = esp_http_client_init(&config);
    

    esp_http_client_set_method(client, HTTP_METHOD_POST);
    esp_http_client_set_header(client, "Content-Type", "application/json");
    esp_http_client_set_header(client, "signature", md5);  //酷狗音乐开发需要的,其他可删
    
    printf("https_with_url request =%s\n",request);
    err = esp_http_client_open(client, strlen(request));
    if(err != ESP_OK) {
        ESP_LOGE(TAG, "Failed to open HTTP connection: %s", esp_err_to_name(err));
        return err;
    }

    int wlen = esp_http_client_write(client, request, strlen(request));
    if (wlen < 0) {
        ESP_LOGE(TAG, "Write failed");
        return ESP_FAIL;
    }

    err = esp_http_client_perform(client);
    if (err == ESP_OK) {
        ESP_LOGI(TAG, "HTTPS Status = %d, content_length = %d",
                esp_http_client_get_status_code(client),
                esp_http_client_get_content_length(client));
    } else {
        ESP_LOGE(TAG, "Error perform http request %s", esp_err_to_name(err));
    }
    esp_http_client_cleanup(client);

    return err;
}
void https_activate_device()
{
    kugou_state = STATE_ACTIVE_DEVICE;

    char request[512] = {0};
    char md5[32] = {0};
    
    base_update_net_time(); //网络时间相关,可删

    sprintf((char *)request, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%d%s%s%s%s",  
                    "{", 
                    "\"pid\":\"", "200023", "\"",
                    ",\"sp\":\"", "KG", "\"",
                    ",\"device_id\":\"", "1kk0350tcn0000asdzzxass", "\"",
                    ",\"client_ip\":\"", "192.168.1.49", "\"",
                    ",\"timestamp\":", base_get_current_timestamp(),
                    ",\"nonce\":\"", "123456", "\"",
                   "}");

    get_md5_of_body_key(request, PKEY, md5);  //酷狗音乐相关,可删

    https_post_msg(HTTP_URL_ACTIVATION, (char *)request, md5);


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值