设置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被动模式,每个文件的一个连接是在另一个端口上进行的,但我认为这不是卷曲的错误。
FTP传输的数据部分*必须*使用第二个新鲜连接,这是由于协议的设计原因。 –