使用libcurl检查FTP登录

时间:2013-11-28 21:29:06

标签: ftp libcurl

我正在使用libcurl将文件上传到远程ftp服务器。我想确保服务器准备开始接收上传,然后才开始发送它们(我无法上传文件进行测试,必须提前知道ftp服务器是否准备就绪)。理想情况下,我想编写一个代码,该代码将登录到ftp服务器并将目录更改为远程服务器上的目标目录。如果此测试通过,我可以假设服务器已准备好接收文件。我写了以下代码

curl_global_init(CURL_GLOBAL_ALL);
m_curl = curl_easy_init(); // Get a curl handle
if (!m_curl)
    return -1;
curl_easy_setopt(m_curl, CURLOPT_USERNAME, "username");
curl_easy_setopt(m_curl, CURLOPT_PASSWORD, "password");
curl_easy_setopt(m_curl, CURLOPT_UPLOAD, 1L);
struct curl_slist* headerList = NULL;
headerList = curl_slist_append(headerList, "CWD directory");
curl_easy_setopt(m_curl, CURLOPT_URL, "ftp://192.168.1.2/");
curl_easy_setopt(m_curl, CURLOPT_POSTQUOTE, headerList);
CURLcode res = curl_easy_perform(m_curl);
if(res == CURLE_OK)
    return 0;
else
    return -1;

用户名和密码正确,目录存在于ftp root下。我查看网络捕获,似乎成功登录后我的客户端请求“PWD”传递正常,但然后它要求目录的SIZE但它得到550错误,无法获得文件大小。我然后尝试没有headerList,只是登录,再次登录传递正常,在PWD请求后我得到500 OOPS,vsf_sysutil_recv_peek没有数据。任何想法我怎么能以类似的方式测试服务器?

1 个答案:

答案 0 :(得分:1)

首先,不要在QUOTE选项中使用“CWD” - 这是不必要的。直接在URL中提供完整路径。

然后,您要求上传,但未指定要上传的内容。我建议您通过执行“虚拟请求”来“准备”上传,例如列出目录内容(如果您使用尾部斜杠结束URL,则会执行此操作)和...

然后你保持手柄,然后在第二个请求中设置上传选项,然后它将重新使用连接并登录,这样就不会有第二个连接过程。

相关问题