libcurl sftp文件上传恢复问题

时间:2018-02-17 11:51:56

标签: c sftp libcurl

我正在尝试开发一个简单的PoC(概念证明)来执行支持部分传输文件恢复的sftp文件上传。

Environemnt:

GNU/Linux Ubuntu 16.04 64b
libcurl 7.58.0 built with libssh2 support
gcc 5.4.0

我以代码示例为起点:https://curl.haxx.se/libcurl/c/ftpuploadresume.html 并将其修改为:

  1. 使用协议字符串sftp
  2. 在用于执行重试的for()循环中强制恢复分支(c = 1)
  3. 我验证的行为是连接完成后:

    1. 在第一次 curl_perform()调用之后,远程文件大小被截断为零(我理解应该检索远程文件大小
    2. 回调 getcontentlengthfunc()永远不会被调用
    3. 我对评论感到有些困惑:

        /*
         * With NOBODY and NOHEADER, libcurl will issue a SIZE
         * command, but the only way to retrieve the result is
         * to parse the returned Content-Length header. Thus,
         * getcontentlengthfunc(). We need discardfunc() above
         * because HEADER will dump the headers to stdout
         * without it.
         */
        curl_easy_setopt(curlhandle, CURLOPT_NOBODY, 1L);
        curl_easy_setopt(curlhandle, CURLOPT_HEADER, 1L);
      

      假设评论正确,我希望将 CURLOPT_HEADER 选项设置为 0L

      我也尝试了,但行为与上述相同。

      更新

      刚刚在github上发现上述行为是设计的,因为SFTP协议不支持HEADER概念,所以我的问题是,如何使用libcurl来检索远程文件大小?

1 个答案:

答案 0 :(得分:0)

经过多次阅读和与curl mainteiner的互动,我解决了这个问题。 一个完全有效的例子为卷曲项目做出了贡献并得到了友好的认可。 详细信息如下:https://curl.haxx.se/libcurl/c/sftpuploadresume.html