参数列表太长了libcurl c程序错误

时间:2015-12-14 12:12:37

标签: c ssl ftp libcurl

我正在使用C程序连接到ftp服务器并上传文件。以前服务器没有使用SSL,我可以使用以下代码进行文件上传:

curl_global_init(CURL_GLOBAL_ALL);

curl = curl_easy_init();

if(curl)
{

    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, throw_away);

    curl_easy_setopt(curl, CURLOPT_USERNAME, "username");
    curl_easy_setopt(curl, CURLOPT_PASSWORD, "password");

    if (CURLE_OK != (res = curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftpb.****.com")))
    {
        printf("Failed to check ftp url, Error : %s : %d\n", curl_easy_strerror(res), res);
    }
    curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);

    // Connection establishment timeout
    curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 20);
    printf("Trying to connect...\n");
    if (CURLE_OK != (res = curl_easy_perform(curl)))
    {
        /* If fail to connect */
        printf("FTP connection failed...%s : %d\n", strerror(res), res);
    }
    else
    {
        /* If connected succesfully */
        printf("Connected to FTP successfully...\n");

      /****** proceed with upload ******/
    }
}

在ftp服务器切换为使用SSL认证后,我在代码中添加了以下行以使用SSL:

    curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);

现在,当我运行程序时,我的应用程序无法连接到FTP并显示消息:

  

“FTP连接失败...参数列表太长:7”

即使我不添加CURLOPT_USE_SSL部分,也会获得相同的错误。

我可以使用Filezilla连接到ftp服务器(仅当我将ftps添加到地址时)。在我的代码中添加ftps会出现错误:

  

“FTP连接失败...设备不是流:60”

有人知道解决方法吗?

2 个答案:

答案 0 :(得分:2)

您无法在libcurl的返回代码上使用strerror()。 libcurl为其返回码提供了自己的strerror()版本。请参阅curl_easy_strerror

您还可以在libcurl-errors手册页上看到错误,在那里您了解到7表示CURLE_COULDNT_CONNECT: "Failed to connect() to host or proxy"。这可能是因为您没有在端口21上运行ftp服务器,这是FTP的默认端口。

您提到的错误60是CURLE_SSL_CACERT,表示您已进一步但libcurl无法验证您的服务器。

答案 1 :(得分:0)

我能够通过添加行

来解决问题

curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,0);

应用程序现在不会尝试验证SSL证书并继续进行连接