2013-11-28 2 views
0

libcurl을 사용하여 원격 FTP 서버에 파일을 업로드하고 있습니다. 서버를 업로드하기 전에 서버에서 업로드를 시작할 준비가되었는지 확인하고 싶습니다. 테스트를 위해 파일을 업로드 할 수 없으며 ftp 서버가 준비되어 있는지 미리 알아야합니다. 이상 적으로는 ftp 서버에 로그인하고 원격 서버의 대상 디렉토리로 디렉토리를 변경할 코드를 작성하려고합니다. 이 테스트가 통과되면 서버가 파일을받을 준비가되어 있다고 가정 할 수 있습니다. 나는 다음 코드를 작성했다.libcurl을 사용하여 FTP 로그인 확인

curl_global_init(CURL_GLOBAL_ALL); 
m_curl = curl_easy_init(); // Get a curl handle 
if (!m_curl) 
    return -1; 
curl_easy_setopt(m_curl, CURLOPT_USERNAME, "username"); 
curl_easy_setopt(m_curl, CURLOPT_PASSWORD, "password"); 
curl_easy_setopt(m_curl, CURLOPT_UPLOAD, 1L); 
struct curl_slist* headerList = NULL; 
headerList = curl_slist_append(headerList, "CWD directory"); 
curl_easy_setopt(m_curl, CURLOPT_URL, "ftp://192.168.1.2/"); 
curl_easy_setopt(m_curl, CURLOPT_POSTQUOTE, headerList); 
CURLcode res = curl_easy_perform(m_curl); 
if(res == CURLE_OK) 
    return 0; 
else 
    return -1; 

사용자 이름과 암호가 정확하고 ftp 루트 아래에 디렉토리가 존재한다. 나는 네트워크 캡쳐를보고 성공적으로 로그인 한 후 내 클라이언트가 "PWD"를 요청하지만 디렉토리 크기를 묻지 만 550 오류가 발생하여 파일 크기를 가져올 수없는 것 같습니다. 나는 그때 headerList, 그냥 로그인을 시도, 다시 로그인 잘 전달하고 PWD 요청 후 나는 500 OOPS, vsf_sysutil_recv_peek 데이터가 없습니다. 어떤 생각으로 비슷한 방식으로 어떻게 서버를 테스트 할 수 있습니까?

답변

1

먼저 QUOTE 옵션에서 "CWD"를 사용하지 마십시오. 단지 필요하지 않습니다. URL에 전체 경로를 직접 제공하십시오.

그런 다음 업로드를 요청했지만 업로드 할 내용을 지정하지 않았습니다. 예를 들어 디렉토리 내용을 나열하는 "더미 요청"을 수행하여 업로드를 "준비"하는 것이 좋습니다 (후행 슬래시가있는 URL을 끝낼 경우).

두 번째 요청에서 업로드 옵션을 설정하면 두 번째 연결 절차가 없으므로 연결과 로그인을 다시 사용합니다.

+0

전 CWL없이 전체 URL로 시작했지만 500 OOPS, vsf_sysutil_recv_peek 데이터가 없으므로 libcurl을 올바르게 사용하지 않는 것으로 나타났습니다. 우선 나는 당신의 대답에 감사 드리며, 내가 한 것은 후행을 추가하는 것이 었습니다. 일반적으로 코드 성공 또는 실패의 핵심이 될 URL의 후행 슬래시는 예상하지 않지만 정규화 된 URL의 대부분은 후행 슬래시가 없으며 슬래시가없는 URL을 지원하는 것으로 간주됩니다. – e271p314

+0

libcurl은 후행 슬래시가없는 URL을 지원합니다. 어쨌든 여기서 주제를 벗어났습니다. –

관련 문제