我正在尝试开发一个简单的 PoC(概念验证),以执行支持部分传输文件恢复的 sftp 文件上传。
环境:
我以代码示例https://curl.haxx.se/libcurl/c/ftpuploadresume.html为起点,并对其进行了修改,使其:
假设这个评论是正确的,我希望选项CURLOPT_HEADER被设置为0L。
环境:
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为起点,并对其进行了修改,使其:
- 使用协议字符串sftp
- 在用于重试的for()循环中强制使用恢复分支(c=1)
我要验证的行为是一旦连接建立后:
- 第一个curl_perform()调用之后远程文件大小会被截断为零(我理解这应该是检索远程文件大小的操作)
- 回调getcontentlengthfunc()从未被调用
还有一条评论让我有点困惑:
/*
* 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检索远程文件大小?