cURL / Mailing Lists / curl-library / Single Mail


Re: The problem of implementing ftp client function: listDirContents()

From: Dan Fandrich <>
Date: Sun, 22 Aug 2010 20:26:26 -0700

On Mon, Aug 23, 2010 at 09:06:18AM +0800, HU Chengzhe wrote:
> Hello,
> when I plan to implement some ftp client functions based on libcurl, I
> encounter some problems:
> struct curl_slist *headerlist = NULL;
> const char s[] = "PWD";
> const char s1[] = "LIST ";

You can't do a LIST command as a pre- or post-quote command. A LIST requires
much more than just sending a command and awaiting the response; it involves
setting up a secondary data connection and performing a file transfer.
To perform a directory listing, put a slash at the of the URL (i.e. or use the CURLOPT_DIRLISTONLY

> const char s2[] = "CWD /home/oamops/cid";

Sending a CWD as a pre- or post-quote command is not recommended as it messes
up the ftp state machine.

> headerlist = curl_slist_append(headerlist, s);
> headerlist = curl_slist_append(headerlist, s2);
> headerlist = curl_slist_append(headerlist, s1);
> curl_easy_setopt(curl, CURLOPT_POSTQUOTE, headerlist);
> /* As I am not sure the return list would be by header or data,
> * I try the two ways at same time

A directory listing is considered a data transfer, so it goes to the

> */
> curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, WriteMemoryCallback);
> curl_easy_setopt(curl, CURLOPT_WRITEHEADER, (void *)&chunk);
> curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
> curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);

>>> Dan
List admin:
Received on 2010-08-23