mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
ftp: allow CURLOPT_IGNORE_CONTENT_LENGTH to ignore size
This allows FTP transfers with growing (or shrinking) files without causing a transfer error. Closes #480
This commit is contained in:
parent
b1199def8c
commit
529f9310b1
@ -22,7 +22,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.TH CURLOPT_IGNORE_CONTENT_LENGTH 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
|
.TH CURLOPT_IGNORE_CONTENT_LENGTH 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
CURLOPT_IGNORE_CONTENT_LENGTH \- ignore Content-Length in HTTP response
|
CURLOPT_IGNORE_CONTENT_LENGTH \- ignore content length
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.nf
|
.nf
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
@ -30,12 +30,18 @@ CURLOPT_IGNORE_CONTENT_LENGTH \- ignore Content-Length in HTTP response
|
|||||||
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IGNORE_CONTENT_LENGTH,
|
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IGNORE_CONTENT_LENGTH,
|
||||||
long ignore);
|
long ignore);
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
If \fIignore\fP is set to 1, ignore the Content-Length header in the HTTP
|
If \fIignore\fP is set to 1L, ignore the Content-Length header in the HTTP
|
||||||
response. This is useful for Apache 1.x (and similar servers) which will
|
response and ignore asking for or relying on it for FTP transfers.
|
||||||
|
|
||||||
|
This is useful for HTTP with Apache 1.x (and similar servers) which will
|
||||||
report incorrect content length for files over 2 gigabytes. If this option is
|
report incorrect content length for files over 2 gigabytes. If this option is
|
||||||
used, curl will not be able to accurately report progress, and will simply
|
used, curl will not be able to accurately report progress, and will simply
|
||||||
stop the download when the server ends the connection.
|
stop the download when the server ends the connection.
|
||||||
|
|
||||||
|
It is also useful with FTP when for example the file is growing while the
|
||||||
|
transfer is in progress which otherwise will unconditionally cause libcurl to
|
||||||
|
report error.
|
||||||
|
|
||||||
Only use this option if strictly necessary.
|
Only use this option if strictly necessary.
|
||||||
.SH DEFAULT
|
.SH DEFAULT
|
||||||
0
|
0
|
||||||
@ -54,7 +60,7 @@ if(curl) {
|
|||||||
}
|
}
|
||||||
.fi
|
.fi
|
||||||
.SH AVAILABILITY
|
.SH AVAILABILITY
|
||||||
Added in 7.14.1
|
Added in 7.14.1. Support for FTP added in 7.46.0.
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
|
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
|
12
lib/ftp.c
12
lib/ftp.c
@ -1789,11 +1789,23 @@ static CURLcode ftp_state_quote(struct connectdata *conn,
|
|||||||
Curl_pgrsSetDownloadSize(data, ftpc->known_filesize);
|
Curl_pgrsSetDownloadSize(data, ftpc->known_filesize);
|
||||||
result = ftp_state_retr(conn, ftpc->known_filesize);
|
result = ftp_state_retr(conn, ftpc->known_filesize);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if(data->set.ignorecl) {
|
||||||
|
/* This code is to support download of growing files. It prevents
|
||||||
|
the state machine from requesting the file size from the
|
||||||
|
server. With an unknown file size the download continues until
|
||||||
|
the server terminates it, otherwise the client stops if the
|
||||||
|
received byte count exceeds the reported file size. Set option
|
||||||
|
CURLOPT_IGNORE_CONTENT_LENGTH to 1 to enable this behavior.*/
|
||||||
|
PPSENDF(&ftpc->pp, "RETR %s", ftpc->file);
|
||||||
|
state(conn, FTP_RETR);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
PPSENDF(&ftpc->pp, "SIZE %s", ftpc->file);
|
PPSENDF(&ftpc->pp, "SIZE %s", ftpc->file);
|
||||||
state(conn, FTP_RETR_SIZE);
|
state(conn, FTP_RETR_SIZE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case FTP_STOR_PREQUOTE:
|
case FTP_STOR_PREQUOTE:
|
||||||
result = ftp_state_ul_setup(conn, FALSE);
|
result = ftp_state_ul_setup(conn, FALSE);
|
||||||
|
Loading…
Reference in New Issue
Block a user