记录下使用libcurl ftp上传的问题
ftp上传的两种方式
FTP分为两个链路,第一个是命令链路,端口是21;第二个是数据链路,只有在上传或下载的时候才会建立,使用哪个端口就取决于客户端所采用的模式了。
- 被动模式(PASV方式)
命令链路建立后,当有数据要传输时, 客户端在命令链路上用PASV命令告诉服务器,“我要传输数据了,给我个端口”,服务器返回一个可用的端口给客户端,客户端向这个端口发起请求,连接建立。 - 主动模式(PORT方式)
命令链路建立后,当有数据要传输时, 客户端在命令链路上用PORT命令告诉服务器,“我打开了某某端口,过来连我啊”,于是服务器向客户端的某某端口发起连接请求,连接建立。
采用主动模式的弊端:
采用主动模式传输,主要问题在于客户端开放给服务端的数据连接端口,服务器不一定能访问到,比如如果有防火墙的话。
libcurl
libcurl默认采用被动模式上传,改为主动模式需要添加一行代码:
`curl_easy_setopt(curl, CURLOPT_FTPPORT, "-");`