Curl_add_custom_headers: support headers with no data
A custom HTTP header ending in a semicolon instead of a colon will be treated as a header to be added without any data portion.
This commit is contained in:
Родитель
6790a543d4
Коммит
aff70e2e95
|
@ -9,7 +9,7 @@ Curl and libcurl 7.22.1
|
||||||
|
|
||||||
This release includes the following changes:
|
This release includes the following changes:
|
||||||
|
|
||||||
o
|
o Empty headers can be sent in HTTP requests by terminating with a semicolon
|
||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
|
@ -22,6 +22,6 @@ This release includes the following known bugs:
|
||||||
This release would not have looked like this without help, code, reports and
|
This release would not have looked like this without help, code, reports and
|
||||||
advice from friends like these:
|
advice from friends like these:
|
||||||
|
|
||||||
|
Yukihiro Kawada
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
|
|
@ -592,7 +592,9 @@ header will be used instead of the internal one. This allows you to make even
|
||||||
trickier stuff than curl would normally do. You should not replace internally
|
trickier stuff than curl would normally do. You should not replace internally
|
||||||
set headers without knowing perfectly well what you're doing. Remove an
|
set headers without knowing perfectly well what you're doing. Remove an
|
||||||
internal header by giving a replacement without content on the right side of
|
internal header by giving a replacement without content on the right side of
|
||||||
the colon, as in: -H \&"Host:".
|
the colon, as in: -H \&"Host:". If you send the custom header with no-value then
|
||||||
|
its header must be terminated with a semicolon, such as \-H "X-Custom-Header;"
|
||||||
|
to send "X-Custom-Header:".
|
||||||
|
|
||||||
curl will make sure that each header you add/replace is sent with the proper
|
curl will make sure that each header you add/replace is sent with the proper
|
||||||
end-of-line marker, you should thus \fBnot\fP add that as a part of the header
|
end-of-line marker, you should thus \fBnot\fP add that as a part of the header
|
||||||
|
|
25
lib/http.c
25
lib/http.c
|
@ -1559,6 +1559,31 @@ CURLcode Curl_add_custom_headers(struct connectdata *conn,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
ptr = strchr(headers->data, ';');
|
||||||
|
if(ptr) {
|
||||||
|
|
||||||
|
ptr++; /* pass the semicolon */
|
||||||
|
while(*ptr && ISSPACE(*ptr))
|
||||||
|
ptr++;
|
||||||
|
|
||||||
|
if(*ptr) {
|
||||||
|
/* this may be used for something else in the future */
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(*(--ptr) == ';') {
|
||||||
|
CURLcode result;
|
||||||
|
|
||||||
|
/* send no-value custom header if terminated by semicolon */
|
||||||
|
*ptr = ':';
|
||||||
|
result = Curl_add_bufferf(req_buffer, "%s\r\n",
|
||||||
|
headers->data);
|
||||||
|
if(result)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
headers = headers->next;
|
headers = headers->next;
|
||||||
}
|
}
|
||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
|
|
|
@ -30,7 +30,7 @@ http
|
||||||
Replaced internal and added custom HTTP headers
|
Replaced internal and added custom HTTP headers
|
||||||
</name>
|
</name>
|
||||||
<command>
|
<command>
|
||||||
-H "extra-header: here" -H "Accept: replaced" http://%HOSTIP:%HTTPPORT/4
|
-H "extra-header: here" -H "Accept: replaced" -H "X-Custom-Header;" -H "X-Test: foo; " -H "X-Test:" -H "X-Test2: foo;" -H "X-Test3: " -H "X-Test4; " -H "X-Test5;ignored" http://%HOSTIP:%HTTPPORT/4
|
||||||
</command>
|
</command>
|
||||||
</client>
|
</client>
|
||||||
|
|
||||||
|
@ -45,6 +45,9 @@ GET /4 HTTP/1.1
|
||||||
Host: %HOSTIP:%HTTPPORT
|
Host: %HOSTIP:%HTTPPORT
|
||||||
extra-header: here
|
extra-header: here
|
||||||
Accept: replaced
|
Accept: replaced
|
||||||
|
X-Custom-Header:
|
||||||
|
X-Test: foo;
|
||||||
|
X-Test2: foo;
|
||||||
|
|
||||||
</protocol>
|
</protocol>
|
||||||
</verify>
|
</verify>
|
||||||
|
|
Загрузка…
Ссылка в новой задаче