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:
|
||||
|
||||
o
|
||||
o Empty headers can be sent in HTTP requests by terminating with a semicolon
|
||||
|
||||
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
|
||||
advice from friends like these:
|
||||
|
||||
|
||||
Yukihiro Kawada
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
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;
|
||||
}
|
||||
return CURLE_OK;
|
||||
|
|
|
@ -30,7 +30,7 @@ http
|
|||
Replaced internal and added custom HTTP headers
|
||||
</name>
|
||||
<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>
|
||||
</client>
|
||||
|
||||
|
@ -45,6 +45,9 @@ GET /4 HTTP/1.1
|
|||
Host: %HOSTIP:%HTTPPORT
|
||||
extra-header: here
|
||||
Accept: replaced
|
||||
X-Custom-Header:
|
||||
X-Test: foo;
|
||||
X-Test2: foo;
|
||||
|
||||
</protocol>
|
||||
</verify>
|
||||
|
|
Загрузка…
Ссылка в новой задаче