mirror of
https://github.com/ading2210/libcurl.js.git
synced 2025-05-13 14:30:02 -04:00
fix handling of duplicate http headers
This commit is contained in:
parent
ca137c3cd2
commit
15179fae43
4 changed files with 15 additions and 6 deletions
|
@ -76,6 +76,8 @@ Most of the standard Fetch API's features are supported, with the exception of:
|
||||||
- Sending credentials/cookies automatically
|
- Sending credentials/cookies automatically
|
||||||
- Caching
|
- Caching
|
||||||
|
|
||||||
|
The response may contain multiple HTTP headers with the same name, which the `Headers` object isn't able to properly represent. If this matters to you, use `response.raw_headers`, which is an array of key value pairs, instead of `response.headers`.
|
||||||
|
|
||||||
Note that there is a hard limit of 50 active TCP connections due to emscripten limitations.
|
Note that there is a hard limit of 50 active TCP connections due to emscripten limitations.
|
||||||
|
|
||||||
### Creating WebSocket Connections:
|
### Creating WebSocket Connections:
|
||||||
|
|
|
@ -132,8 +132,11 @@ function create_response(response_data, response_info) {
|
||||||
writable: false,
|
writable: false,
|
||||||
value: new Headers()
|
value: new Headers()
|
||||||
});
|
});
|
||||||
for (let header_name in response_info.headers) {
|
Object.defineProperty(response_obj, "raw_headers", {
|
||||||
let header_value = response_info.headers[header_name];
|
writable: false,
|
||||||
|
value: response_info.headers
|
||||||
|
});
|
||||||
|
for (let [header_name, header_value] of response_info.headers) {
|
||||||
response_obj.headers.append(header_name, header_value);
|
response_obj.headers.append(header_name, header_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -167,12 +167,16 @@ void finish_request(CURLMsg *curl_msg) {
|
||||||
cJSON* url_item = cJSON_CreateString(response_url);
|
cJSON* url_item = cJSON_CreateString(response_url);
|
||||||
cJSON_AddItemToObject(response_json, "url", url_item);
|
cJSON_AddItemToObject(response_json, "url", url_item);
|
||||||
|
|
||||||
cJSON* headers_item = cJSON_CreateObject();
|
cJSON* headers_item = cJSON_CreateArray();
|
||||||
struct curl_header *prev_header = NULL;
|
struct curl_header *prev_header = NULL;
|
||||||
struct curl_header *header = NULL;
|
struct curl_header *header = NULL;
|
||||||
while ((header = curl_easy_nextheader(http_handle, CURLH_HEADER, -1, prev_header))) {
|
while ((header = curl_easy_nextheader(http_handle, CURLH_HEADER, -1, prev_header))) {
|
||||||
cJSON* header_entry = cJSON_CreateString(header->value);
|
cJSON* header_key_entry = cJSON_CreateString(header->name);
|
||||||
cJSON_AddItemToObject(headers_item, header->name, header_entry);
|
cJSON* header_value_entry = cJSON_CreateString(header->value);
|
||||||
|
cJSON* header_pair_item = cJSON_CreateArray();
|
||||||
|
cJSON_AddItemToArray(header_pair_item, header_key_entry);
|
||||||
|
cJSON_AddItemToArray(header_pair_item, header_value_entry);
|
||||||
|
cJSON_AddItemToArray(headers_item, header_pair_item);
|
||||||
prev_header = header;
|
prev_header = header;
|
||||||
}
|
}
|
||||||
cJSON_AddItemToObject(response_json, "headers", headers_item);
|
cJSON_AddItemToObject(response_json, "headers", headers_item);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "libcurl.js",
|
"name": "libcurl.js",
|
||||||
"version": "0.4.0",
|
"version": "0.4.1",
|
||||||
"description": "An experimental port of libcurl to WebAssembly for use in the browser.",
|
"description": "An experimental port of libcurl to WebAssembly for use in the browser.",
|
||||||
"main": "libcurl.mjs",
|
"main": "libcurl.mjs",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue