使用libcURL通过HTTP代理连接到FTP服务器失败

时间:2016-08-30 09:41:09

标签: c++ curl libcurl

我在使用libCurl执行FTP操作之前使用此代码设置HTTP代理地址,我尝试连接的FTP服务器位于互联网(S& P的服务器)

curl_easy_setopt(m_pCURLSession, CURLOPT_PROXY, m_strProxy); //m_strProxy is a CString object having the overloading of the cast operator (const char*) so no problems here !
curl_easy_setopt(m_pCURLSession, CURLOPT_HTTPPROXYTUNNEL, 1);

相同的代码对HTTP操作没有问题!

我的HTTP代理服务器(使用FreeProxy创建)适用于WinSCP,有时适用于FileZilla。

问题如下,如果HTTP代理位于另一台机器上,我收到此cURL错误:

  

错误= 55向对等方发送数据失败

当我将HTTP代理放在同一台机器上时,我收到了这个错误:

  

(错误= 56 |从对等方接收数据时失败)!

当我删除此说明时:

curl_easy_setopt(m_pCURLSession, CURLOPT_HTTPPROXYTUNNEL, 1);

当我请求FTP远程直接列表时,我收到一个奇怪的回复,我收到一个无用的HTML响应....而我期待一个由"\r\n"分隔的文件/文件夹名称列表,就像我不喜欢使用代理。

1 个答案:

答案 0 :(得分:0)

解决方案很简单但不明显:首先升级到最新的libcURL版本,因为在旧版本中存在与通过HTTP代理进行FTP隧道相关的已知错误,然后使用此选项:

curl_easy_setopt(m_pCURLSession, CURLOPT_FTP_USE_EPSV, 0);