我正在使用libcurl将文件上传到远程ftp服务器。我想确保服务器已准备好开始接收上传文件,然后才能真正开始发送它们(我无法上传文件进行测试,必须事先知道ftp服务器是否准备就绪)。理想情况下,我想编写一个代码,它将登录到ftp服务器并将目录切换到远程服务器上的目标目录。如果测试通过,我可以假定服务器已准备好接收文件。我写了下面的代码使用libcurl检查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根目录下存在。我看网络捕获,似乎在成功登录后,我的客户端请求“PWD”,它传递正常,但它要求目录的大小,但它得到550错误,无法获得文件大小。然后,我尝试了没有headerList,只是登录,再次登录通过罚款和PWD请求后,我得到500 OOPS,vsf_sysutil_recv_peek没有数据。任何想法如何以类似的方式测试服务器?
我开始使用完整的URL和没有CWD,但我得到了500 OOPS,vsf_sysutil_recv_peek没有数据,所以我想我没有正确使用libcurl。首先我感谢你的回答,我所做的只是添加最后的斜线,就是这样。一般来说,我不认为URL中的尾部斜线是代码成功或失败的关键,大多数规范化的URL都没有结尾斜线,也许考虑支持URL而不使用斜线。 – e271p314
libcurl支持的URL很好,没有斜线。但无论如何,这是无关紧要的话题。 –