/* host_fullcookie.c — 用完整原始 cookie 直发 weapi account/get,验证服务器是否识别会话。 * 绕过 ncm_req_build 的 ck_parse 截断:手写 Cookie 头 + 只用 ncm_crypto_weapi 生成 body。 * 用法: ./host_fullcookie '<完整cookie>' [cacert] */ #include "ncm.h" #include "ncm_crypto.h" #include "ncm_http.h" #include "ncm_common.h" #include #include int main(int argc, char **argv) { if (argc < 2) { fprintf(stderr, "usage: %s ''\n", argv[0]); return 1; } const char *cookie = argv[1]; ncm_http_set_verify_default(1, argc > 2 ? argv[2] : NULL); char params[1024], encsk[300]; int rc = ncm_crypto_weapi("{\"csrf_token\":\"\"}", params, sizeof params, encsk, sizeof encsk); if (rc != NCM_OK) { printf("weapi crypto rc=%d\n", rc); return 1; } char p_enc[1100]; if (ncm_url_encode(params, p_enc, sizeof p_enc) < 0) { printf("urlencode fail\n"); return 1; } char body[1400]; snprintf(body, sizeof body, "params=%s&encSecKey=%s", p_enc, encsk); char hdrs[2048]; snprintf(hdrs, sizeof hdrs, "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "Cookie: %s\r\n" "Referer: https://music.163.com", cookie); ncm_http_req_t req; memset(&req, 0, sizeof req); req.url = "https://music.163.com/weapi/w/nuser/account/get"; req.method = "POST"; req.body = body; req.body_len = strlen(body); req.extra_hdrs = hdrs; req.verify_ca = NCM_HTTP_VERIFY_DEFAULT; req.timeout_ms = 20000; char respbuf[65536]; ncm_http_resp_t resp; long t0 = (long)ncm_now_ms(); rc = ncm_http_request(&req, respbuf, sizeof respbuf, &resp); long dt = (long)ncm_now_ms() - t0; printf("rc=%d elapsed_ms=%ld status=%d cl=%zu chunked=%d body_len=%zu\n", rc, dt, resp.status, resp.content_length, resp.chunked, resp.body_len); if (resp.body_len) printf("body:\n%.*s\n", (int)resp.body_len, resp.body); return 0; }