1
0
mirror of https://github.com/moparisthebest/curl synced 2024-11-16 06:25:03 -05:00

CURLINFO_CONDITION_UNMET: return true for 304 http status code

In libcurl, CURLINFO_CONDITION_UNMET is used to avoid writing to the
output file if the server did not transfered a file based on time
condition. In the same manner, getting a 304 HTTP response back from the
server, for example after passing a custom If-Match-* header, also
fulfill this condition.

Fixes #5181
Closes #5183
This commit is contained in:
Kwon-Young Choi 2020-04-04 17:27:18 +02:00 committed by Daniel Stenberg
parent a448a4ce26
commit 54ecc11cc4
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
3 changed files with 10 additions and 5 deletions

View File

@ -210,7 +210,7 @@ TLS session info that can be used for further processing. See
\fICURLINFO_TLS_SESSION(3)\fP. Deprecated option, use \fICURLINFO_TLS_SESSION(3)\fP. Deprecated option, use
\fICURLINFO_TLS_SSL_PTR(3)\fP instead! \fICURLINFO_TLS_SSL_PTR(3)\fP instead!
.IP CURLINFO_CONDITION_UNMET .IP CURLINFO_CONDITION_UNMET
Whether or not a time conditional was met. Whether or not a time conditional was met or 304 HTTP response.
See \fICURLINFO_CONDITION_UNMET(3)\fP See \fICURLINFO_CONDITION_UNMET(3)\fP
.IP CURLINFO_RTSP_SESSION_ID .IP CURLINFO_RTSP_SESSION_ID
RTSP session ID. RTSP session ID.

View File

@ -22,7 +22,7 @@
.\" .\"
.TH CURLINFO_CONDITION_UNMET 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options" .TH CURLINFO_CONDITION_UNMET 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
.SH NAME .SH NAME
CURLINFO_CONDITION_UNMET \- get info on unmet time conditional CURLINFO_CONDITION_UNMET \- get info on unmet time conditional or 304 HTTP response.
.SH SYNOPSIS .SH SYNOPSIS
#include <curl/curl.h> #include <curl/curl.h>
@ -32,7 +32,9 @@ Pass a pointer to a long to receive the number 1 if the condition provided in
the previous request didn't match (see \fICURLOPT_TIMECONDITION(3)\fP). Alas, the previous request didn't match (see \fICURLOPT_TIMECONDITION(3)\fP). Alas,
if this returns a 1 you know that the reason you didn't get data in return is if this returns a 1 you know that the reason you didn't get data in return is
because it didn't fulfill the condition. The long this argument points to will because it didn't fulfill the condition. The long this argument points to will
get a zero stored if the condition instead was met. get a zero stored if the condition instead was met. This can also return 1 if
the server responded with a 304 HTTP status code, for example after sending a
custom "If-Match-*" header.
.SH PROTOCOLS .SH PROTOCOLS
HTTP and some HTTP and some
.SH EXAMPLE .SH EXAMPLE

View File

@ -239,8 +239,11 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info,
*param_longp = data->info.conn_local_port; *param_longp = data->info.conn_local_port;
break; break;
case CURLINFO_CONDITION_UNMET: case CURLINFO_CONDITION_UNMET:
/* return if the condition prevented the document to get transferred */ if(data->info.httpcode == 304)
*param_longp = data->info.timecond ? 1L : 0L; *param_longp = 1L;
else
/* return if the condition prevented the document to get transferred */
*param_longp = data->info.timecond ? 1L : 0L;
break; break;
case CURLINFO_RTSP_CLIENT_CSEQ: case CURLINFO_RTSP_CLIENT_CSEQ:
*param_longp = data->state.rtsp_next_client_CSeq; *param_longp = data->state.rtsp_next_client_CSeq;