mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -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"
|
||||
.SH NAME
|
||||
CURLOPT_IGNORE_CONTENT_LENGTH \- ignore Content-Length in HTTP response
|
||||
CURLOPT_IGNORE_CONTENT_LENGTH \- ignore content length
|
||||
.SH SYNOPSIS
|
||||
.nf
|
||||
#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,
|
||||
long ignore);
|
||||
.SH DESCRIPTION
|
||||
If \fIignore\fP is set to 1, ignore the Content-Length header in the HTTP
|
||||
response. This is useful for Apache 1.x (and similar servers) which will
|
||||
If \fIignore\fP is set to 1L, ignore the Content-Length header in the HTTP
|
||||
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
|
||||
used, curl will not be able to accurately report progress, and will simply
|
||||
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.
|
||||
.SH DEFAULT
|
||||
0
|
||||
@ -54,7 +60,7 @@ if(curl) {
|
||||
}
|
||||
.fi
|
||||
.SH AVAILABILITY
|
||||
Added in 7.14.1
|
||||
Added in 7.14.1. Support for FTP added in 7.46.0.
|
||||
.SH RETURN VALUE
|
||||
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
|
||||
.SH "SEE ALSO"
|
||||
|
16
lib/ftp.c
16
lib/ftp.c
@ -1790,8 +1790,20 @@ static CURLcode ftp_state_quote(struct connectdata *conn,
|
||||
result = ftp_state_retr(conn, ftpc->known_filesize);
|
||||
}
|
||||
else {
|
||||
PPSENDF(&ftpc->pp, "SIZE %s", ftpc->file);
|
||||
state(conn, FTP_RETR_SIZE);
|
||||
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 {
|
||||
PPSENDF(&ftpc->pp, "SIZE %s", ftpc->file);
|
||||
state(conn, FTP_RETR_SIZE);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user