2016-08-30 7 views
0

libCurl에서 FTP 작업을 수행하기 전에이 코드를 사용하여 HTTP 프록시 주소를 설정합니다. 연결하려는 FTP 서버가 인터넷에 있습니다 (S & P의 서버)libcURL로 HTTP 프록시를 통해 FTP 서버에 연결하지 못했습니다.

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 프록시는 I이 컬 오류가 발생했습니다 다른 시스템에있는 경우 :

오류 = 55 내가 넣을 때 피어

에 데이터를 전송 실패 같은 컴퓨터에서 HTTP 프록시가 발생했습니다.이 오류가 발생했습니다 :

(오류 = 56 | 피어에서 데이터를 수신 할 때 오류 발생)! 내가이 명령을 삭제하면

는 :
curl_easy_setopt(m_pCURLSession, CURLOPT_HTTPPROXYTUNNEL, 1); 

은 내가 FTP 원격 directorty 목록을 요청할 때이 목록을 기대하고있는 반면, 나는 .... 쓸모있는 HTML 응답을받을 이상한 반응을 얻었다 프록시를 사용하지 않을 때처럼 파일/폴더 이름을 "\r\n"으로 구분합니다.

답변

0

해결책은 간단하지만 명확하지 않다 :

curl_easy_setopt(m_pCURLSession, CURLOPT_FTP_USE_EPSV, 0); 
:이 옵션을 사용하여 이전 버전의 HTTP 프록시를 통해 FTP 터널링에 관련된 알려진 버그가 있기 때문에 우선은 최신 libcurl에서 버전으로 업그레이드