设置CURLOPT_URL强制创建第二个FTP连接吗?

问题描述:

我想打开与FTP服务器的连接并下载2个不同的文件。名称完全不同,我不能使用通配符。设置CURLOPT_URL强制创建第二个FTP连接吗?

我想我可以设置主机名和文件,然后调用curl_easy_perform,然后再次设置文件并最后一次调用curl_easy_perform

但是,似乎我必须使用包含主机名和文件名的CURLOPT_URL

我担心的是,下面的代码(缺少错误检查只是要短这里):

... 
curl_easy_setopt(handle, CURLOPT_URL, "ftp://myserver//foo.dat"); 
curl_easy_perform(handle); 
curl_easy_setopt(handle, CURLOPT_URL, "ftp://myserver//bar.png"); 
curl_easy_perform(handle); 

打开FTP连接两次,给予了很多可以避免的开销。

所以我在这里错过了什么? libcurl会注意到主机名部分是相同的,因此避免两次打开相同的连接?如果没有,我怎么才能打开连接只有一次?

启用CURLOPT_VERSBOSE表明:

* Connection #0 to host 127.0.0.1 left intact 
* Re-using existing connection! (#0) with host 127.0.0.1 
* Connected to 127.0.0.1 (127.0.0.1) port 21 (#0) 
* Request has same path as previous transfer 

此外,Wireshark的显示连接到端口21是由只有一次,在整个传输(包括两个文件了)持续。

但是,由于ftp被动模式,每个文件的一个连接是在另一个端口上进行的,但我认为这不是卷曲的错误。

+1

FTP传输的数据部分*必须*使用第二个新鲜连接,这是由于协议的设计原因。 –