我需要使用 cURL 将一些文件上传到 SFTP 服务器,必须使用 cURL,因为我稍后会使用 cURL_multi 等来同时传输文件(除非有人知道支持 FTP、使用密码的 SFTP、使用密钥的 SFTP 的命令行库,并且支持最多 10 个同时传输)。
我遇到的问题是 cURL 运行速度非常慢。使用 Ubuntu 12.04 上的标准 SFTP 客户端上传时,我的速度大约为 70Kb/s(这很好,这只是服务器的速度),但使用 cURL 时,速度大约为 35Kb/s,是 SFTP 速度的一半 :/
是否有人知道有什么方法可以加快 cURL 的速度,最好是不需要重新编译 cURL,但如果需要的话我会这样做。
这是 SFTP 的命令:
/usr/bin/sftp -oProtocol=2 -oIdentityFile=/path/to/key.pri -oPort=5000 \
-oStrictHostKeyChecking=no [email protected]
然后put filename.wav
当它连接时...
使用 cURL 的话:
curl -v -u username: --key /path/to/key.pri --pubkey /path/to/key.pub \
-T /path/to/filename.wav sftp://thedomain.com:5000/folder/TEST/filename.wav \
--insecure
这是 cURL 版本信息:
curl 7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 libssh2/1.2.8 librtmp/2.3 协议:dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp 功能:GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
对每个人来说肯定不可能都这么慢吧?
答案1
不幸的是,这是 curl 的一个已知问题。似乎可以通过使用更大的文件重新编译来缓解此问题CURL_MAX_WRITE_SIZE
;请参阅邮件列表中的此条目。
由于您最终尝试实现多上传,因此您仍可能成功使用 SFTP 通过 curl 填充传出管道,无论如何这都会为您提供最佳的吞吐量:)