curl报错:23

来源:16-9 实现下载任务的添加-2

L_Carnegie

2023-04-09

用curl请求尝试下载ubuntu18.04,报错,错误码:23,具体信息如下:

E:\C_ProgramSpace\Chapter16\cmake-build-debug-mingw\bin\downloader.exe
HTTP/1.1 200 OK

Date: Sun, 09 Apr 2023 09:08:31 GMT

Server: Apache/2.4.29 (Ubuntu)

Last-Modified: Wed, 15 Sep 2021 20:42:31 GMT

ETag: “95da8000-5cc0ebcbeba61”

Accept-Ranges: bytes

Content-Length: 2514124800

Content-Type: application/x-iso9660-image

[Thread-14364] (http_manager.c:86) RetrieveOutputNameFromUrl: decode filename: ubuntu-18.04.6-desktop-amd64.iso
[Thread-14364] (http_manager.c:143) CurlBodyFunction: Fail to open file: //ubuntu-18.04.6-desktop-amd64.iso
[Thread-14364] (main.c:56) OnProgress: 16384/2514124800
[Thread-14364] (main.c:64) OnError: error: 23 Failed writing received data to disk/application

Process finished with exit code 0

代码如下:
/**

  • 处理请求体

  • @param buffer

  • @param size

  • @param nitems

  • @param request_context

  • @return
    */
    size_t CurlBodyFunction(char *buffer, size_t size, size_t nitems, RequestContext *request_context) {
    //判断文件是否打开
    if (!request_context->output_stream) {
    if (!request_context->output_filename) {
    RetrieveOutputNameFromUrl(request_context);
    }
    }

    if (request_context->output_filename) {
    curl_easy_getinfo(request_context->curl, CURLINFO_RESPONSE_CODE, &request_context->response_code);

     if (request_context->response_code == 206) {
         request_context->output_stream = SmartFOpenFileInDirectory(
             request_context->download_directory,
             request_context->output_filename,
             "ab");
     } else {
         request_context->output_stream = SmartFOpenFileInDirectory(
             request_context->download_directory,
             request_context->output_filename,
             "wb");
     }
     /**打印错误信息**/
     if (!request_context->output_stream) {
         PRINTLNF("Fail to open file: %s/%s",
                  request_context->download_directory,
                  request_context->output_filename);
         return -1;
     }
    

    } else {
    return -1;
    }

    if (request_context->output_stream) {
    fwrite(buffer, size, nitems, request_context->output_stream);
    }

    return size * nitems;
    }

/**
测试程序
**
static void TestHttp() {
Request request = {
.progress_callback = OnProgress,
.error_callback = OnError,
.success_callback = OnSuccess
};

RequestContext *context = CreateRequestContext(&request,
                                               "https://releases.ubuntu.com/bionic/ubuntu-18.04.6-desktop-amd64.iso",
                                               "/");
SendRequest(context);

if (context->curl_code == CURLE_OK) {
    request.success_callback(request.receiver, "OK");
} else {
    request.error_callback(request.receiver, context->curl_code, curl_easy_strerror(context->curl_code));
}

DestroyRequestContext(context);

}

写回答

1回答

bennyhuo

2023-04-09

Failed writing received data to disk/application

是不是你本地空间不足?看样子是写入文件失败了。找个小点儿的文件试试
0
0

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2208 学习 · 853 问题

查看课程