libcurl中执行SFTP / FTP命令没有实际转让(Executing SFTP/FTP co

2019-08-03 02:19发布

是否有可能libcurl中没有文件传输的实际执行尝试SFTP命令。

我将要执行的命令(删除文件实际上)使用CURLOPT_QUOTE,但在执行操作(和它成功执行,文件将被删除)卷曲试图上传或下载文件(基于CURLOPT_UPLOAD)之后,所以我得到了CURLE_REMOTE_FILE_NOT_FOUND错误错误码。

我试过到目前为止 - 不设定“不正确的网址错误”的URL的结果,设置CURLOPT_CONNECT_ONLY导致报价不执行为好。 有没有什么标准呢?

curl_global_init(CURL_GLOBAL_DEFAULT);

char temp[2000];
_snprintf(STRPARAM(temp),"%s://%s:%d/%s","sftp",m_url,m_port,a_ftpPath);
curl_easy_setopt(m_curl, CURLOPT_URL,temp);
_snprintf(STRPARAM(temp),"%s:%s",m_name,m_pass);
curl_easy_setopt(m_curl, CURLOPT_USERPWD, temp);
curl_easy_setopt(m_curl, CURLOPT_SSH_AUTH_TYPES, CURLSSH_AUTH_PASSWORD);

curl_easy_setopt(m_curl, CURLOPT_UPLOAD, 0L);
curl_easy_setopt(m_curl, CURLOPT_READFUNCTION, NULL);
curl_easy_setopt(m_curl, CURLOPT_NOBODY, 1L);
curl_easy_setopt(m_curl, CURLOPT_HEADER, 1L);

struct curl_slist *headerlist=NULL;
_snprintf(STRPARAM(temp),"rm /%s",a_ftpPath);
headerlist = curl_slist_append(headerlist, temp);
curl_easy_setopt(m_curl, CURLOPT_QUOTE, headerlist); 

m_res = curl_easy_perform(m_curl);

curl_easy_setopt(m_curl, CURLOPT_QUOTE, NULL); 
curl_easy_setopt(m_curl, CURLOPT_HEADER, 0L);
curl_easy_setopt(m_curl, CURLOPT_NOBODY, 0L);
curl_slist_free_all (headerlist);

curl_global_cleanup();

Answer 1:

CURLOPT_NOBODY是问,没有“身体”就是要转移的关键。



Answer 2:

你可以尝试phpseclib,一个纯粹的PHP执行SFTP :

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

$sftp->delete('filename.remote'); // doesn't delete directories
// recursive delete
$sftp->delete('dirname.remote', true); // deletes a directory and all its contents
?>


文章来源: Executing SFTP/FTP command in libcurl without actual transfer