以前用的libcurl,不支持sftp协议,所以要重编译libcurl,来支持sftp上传文件
先down下来源码 https://github.com/curl/curl
winbuild/BUILD.WINDOWS.txt里面有windows的编译方法
Once you are in the console, go to the winbuild directory in the Curl
sources:
cd curl-src\winbuild
Then you can call nmake /f Makefile.vc with the desired options (see below).
The builds will be in the top src directory, builds\ directory, in
a directory named using the options given to the nmake call.
nmake /f Makefile.vc mode=<static or dll> <options>
where <options> is one or many of:
VC=<6,7,8,9,10,11,12,14,15> - VC versions
WITH_DEVEL=<path> - Paths for the development files (SSL, zlib, etc.)
Defaults to sibbling directory deps: ../deps
Libraries can be fetched at https://windows.php.net/downloads/php-sdk/deps/
Uncompress them into the deps folder.
WITH_SSL=<dll or static> - Enable OpenSSL support, DLL or static
WITH_NGHTTP2=<dll or static> - Enable HTTP/2 support, DLL or static
WITH_MBEDTLS=<dll or static> - Enable mbedTLS support, DLL or static
WITH_CARES=<dll or static> - Enable c-ares support, DLL or static
WITH_ZLIB=<dll or static> - Enable zlib support, DLL or static
WITH_SSH2=<dll or static> - Enable libSSH2 support, DLL or static
ENABLE_SSPI=<yes or no> - Enable SSPI support, defaults to yes
ENABLE_IPV6=<yes or no> - Enable IPv6, defaults to yes
ENABLE_IDN=<yes or no> - Enable use of Windows IDN APIs, defaults to yes
Requires Windows Vista or later
ENABLE_WINSSL=<yes or no> - Enable native Windows SSL support, defaults to yes
GEN_PDB=<yes or no> - Generate Program Database (debug symbols for release build)
DEBUG=<yes or no> - Debug builds
MACHINE=<x86 or x64> - Target architecture (default is x86)
CARES_PATH=<path to cares> - Custom path for c-ares
MBEDTLS_PATH=<path to mbedTLS> - Custom path for mbedTLS
NGHTTP2_PATH=<path to HTTP/2> - Custom path for nghttp2
SSH2_PATH=<path to libSSH2> - Custom path for libSSH2
SSL_PATH=<path to OpenSSL> - Custom path for OpenSSL
ZLIB_PATH=<path to zlib> - Custom path for zlib
如果要支持sftp,需要WITH_SSH2,所以需要安装libssh2
安装libssh2
down源码 https://github.com/libssh2/libssh2
这玩意编译起来也挺恶心的,参照了 http://www.guoziweb.com/html/other/2018/06/13/2265.html
libssh2,依赖openssl和zlib,可以直接下载库文件,就不说了
强烈推荐链接中的第二种编译方法
cd libssh2
mkdir dll <--directory to install libssh2
mkdir build <-- directory to build
cd build
cmake -DCRYPTO_BACKEND=WinCNG -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=../dll --build ..
完了会在build目录生成一个vs工程,打开,找到libssh2项目,x64,或者x86,编译出来就可以了,libssh2.lib,libssh2.dll都有了
然后就开始编译libcurl
首先新建几个目录,里面放openssl和libssh2的库和头文件,目录结构如下
然后,打开命令行
cd curl-master/winbuild
curl-master\winbuild>nmake /f Makefile.vc mode=dll MACHINE=x64 WITH_SSL=static SSL_PATH=..\openssl-x64 WITH_SSH2=static SSH2_PATH=..\libssh2-x64
然后,在builds目录,会看到这么些文件夹,里面就是编译好的库
然后到这里,就能看到dll和一个curl.exe
然后,打开cmd窗口,
cd curl-master\builds\libcurl-vc-x64-release-dll-ssl-static-ssh2-static-ipv6-sspi\bin
curl.exe -V
curl 7.65.0-DEV (x86_64-pc-win32) libcurl/7.65.0-DEV OpenSSL/1.0.2r WinIDN libssh2/1.9.0_DEV
Release-Date: [unreleased]
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS HTTPS-proxy IDN IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI
就能看到curl支持哪些协议了,sftp已经支持了
通过sftp上传文件,网上例子很多,就不展示了,官网也有很多例子 https://curl.haxx.se/libcurl/c/example.html
最后吐槽一下,windows编译东西真的太恶心了