【问题标题】:Making New Directory with libcurl使用 libcurl 创建新目录
【发布时间】:2014-01-05 22:07:46
【问题描述】:

我一直在修改 libcurl,到目前为止它还不错。我有一些真正让我困惑的事情。我需要为远程服务器创建一个目录,这里有问题

  1. 我在 CURLOPT_URL 中传递了什么?它是根 URL 还是完整的第 i 个目录?

  2. 我希望在创建目录时产生连锁反应,也就是说,如果我有目录 /abc/def/ghi,那么如果它们不存在,则应该创建它们。我试过 CURLOPT_FTP_CREATE_MISSING_DIRS 但不起作用。

  3. 试过 MKD 失败了,我不能确定为什么。以下是应用程序的相关代码和日志

代码

CURL* handle = curl_easy_init();

SetHandleOptions(handle); //set options

CURLcode res;
wxString uploadUrl =....;//full URL with path like ftp.xyz.com/public_html/dir1/
wxString command1 = "MKD "+uploadUrl;
wxString command2 = "CWD "+uploadUrl;
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, command1.c_str());
headers = curl_slist_append(headers, command2.c_str());
curl_easy_setopt(handle, CURLOPT_QUOTE, headers);
const char* uploadUrlStr = uploadUrl.c_str();

if(handle)
{
    //do file upload here
    /* upload to this place */
    curl_easy_setopt(handle, CURLOPT_URL, uploadUrlStr);
    /* enable verbose for easier tracing */
    curl_easy_setopt(handle, CURLOPT_VERBOSE, 1L);
    curl_easy_setopt(handle, CURLOPT_FTP_CREATE_MISSING_DIRS, 1L);
    curl_easy_setopt(handle, CURLOPT_QUOTE, headers);

    res = curl_easy_perform(handle);

    if(res==CURLE_OK)
    {
        SendMessage(_("Successfully Created Directory: ")+uploadUrl, HERROR_TYPE_WARNING);
    }
    else
    {
        //send error message
        wxString str(curl_easy_strerror(res));
        SendMessage(str);
    }
    /* always cleanup */
    curl_easy_cleanup(handle);

}
else
{
    SendMessage(_("Could Not Connect to Server: Invalid Handle"), HERROR_TYPE_CRITICAL);
}

curl_slist_free_all(headers);

日志

----------Wed Dec 18 01:33:15 2013---------- 
Changing Directory to / [01:33:20]
Successfully logged In [01:33:21]
No error [01:33:24]
Starting Files List Fetching... [01:33:24]
No error [01:33:26]
 [01:33:32]
IDN support not present, can't parse Unicode domains
 [01:33:32]
About to connect() to ftp.hosanna.site40.net port 21 (#2)
 [01:33:33]
  Trying 31.170.162.203...
 [01:33:33]
Adding handle: conn: 0x7fffd0013110
 [01:33:33]
Adding handle: send: 0
 [01:33:33]
Adding handle: recv: 0
 [01:33:33]
Curl_addHandleToPipeline: length: 1
 [01:33:33]
- Conn 2 (0x7fffd0013110) send_pipe: 1, recv_pipe: 0
 [01:33:33]
 [01:33:33]
 [01:33:33]
Closing connection 3
 [01:33:33]
Couldn't resolve host name [01:33:33]
Connected to ftp.hosanna.site40.net (31.170.162.203) port 21 (#2)
 [01:33:34]
220---------- Welcome to Pure-FTPd [privsep] ----------
220-You are user number 9 of 500 allowed.
220-Local time is now 17:33. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:35]
220-You are user number 9 of 500 allowed.
220-Local time is now 17:33. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:35]
220-Local time is now 17:33. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:35]
220-This is a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:35]
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:35]
USER xxxxxx
 [01:33:35]
331 User xxxxxx OK. Password required
tes of inactivity.
-You are user number 9 of 500 allowed.
220-Local time is now 17:33. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:35]
PASS xxxxxx
 [01:33:35]
230-OK. Current restricted directory is /
230-124 files used (1%) - authorized: 10000 files
230 3051 Kbytes used (0%) - authorized: 1536000 Kb

220-This is a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:36]
230-124 files used (1%) - authorized: 10000 files
230 3051 Kbytes used (0%) - authorized: 1536000 Kb

220-This is a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:36]
230 3051 Kbytes used (0%) - authorized: 1536000 Kb

220-This is a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:36]
PWD
 [01:33:36]
257 "/" is your current location
ized: 1536000 Kb
files used (1%) - authorized: 10000 files
230 3051 Kbytes used (0%) - authorized: 1536000 Kb
 [01:33:37]
Entry path is '/'
 [01:33:37]
MKD ftp://ftp.hosanna.site40.net/public_html/Zulu names and meanings
 [01:33:37]
ftp_perform ends with SECONDARY: 0
 [01:33:37]
550-Can't create directory: No such file or directory
550-124 files used (1%) - authorized: 10000 files
550 3051 Kbytes used (0%) - authorized: 1536000 Kb
 a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:37]
550-124 files used (1%) - authorized: 10000 files
550 3051 Kbytes used (0%) - authorized: 1536000 Kb
 a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:37]
550 3051 Kbytes used (0%) - authorized: 1536000 Kb
 a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
 [01:33:37]
QUOT command failed with 550
 [01:33:37]
Closing connection 2
 [01:33:37]
Quote command returned error [01:33:37]

【问题讨论】:

    标签: c++ ftp libcurl


    【解决方案1】:

    确保路径的形式是 /public_html/somedir 而不是 ftp://ftp.somesite.com/public_html/somedir

    这就是我的代码出了问题。所以我通过删除 URL 来解决。我相信应该有一个关于 libcurl 的部分来解释预期的 URL 格式。一旦我完全掌握它,我会贡献它!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 2016-11-15
      • 2021-10-29
      • 2011-10-24
      相关资源
      最近更新 更多