C ++ запрос выглядит так
emscripten_fetch_attr_t attr;
emscripten_fetch_attr_init(&attr);
strcpy(attr.requestMethod, "GET");
// case 1
// static std::vector<const char*> custom_headers = {"Token", "00000000", nullptr};
// attr.requestHeaders = custom_headers.data();
// case 2
static const char* custom_headers[3] = {"Token", "00000000-0000-0000-0000-000000000000", nullptr};
attr.requestHeaders = custom_headers;
attr.attributes = EMSCRIPTEN_FETCH_LOAD_TO_MEMORY;
attr.onsuccess = onDownload;
attr.onerror = onError;
emscripten_fetch(&attr, "http://localhost:9080/api/session");
XHR работает нормально, за исключением полей заголовка — они не установлены в обоих случаях.
Док комментарий от emscripten_fetch_attr_t
структура сказать:
// Points to an array of strings to pass custom headers to the request. This array takes the form
// {"key1", "value1", "key2", "value2", "key3", "value3", ..., 0 }; Note especially that the array
// needs to be terminated with a null pointer.
const char * const *requestHeaders;
Emscripten FetchAPI ссылка а также тесты кода не имеет примера requestHeaders
использование.
Как именно я могу установить свои собственные поля заголовка запроса?
Причина, по которой он не назначил никаких пользовательских заголовков, действительно глупа — у него еще нет действительной и проверенной реализации в текущей версии:
emscripten /1.37.13/system/lib/fetch/emscripten_fetch.cpp: строка 78
fetch->__attributes.requestHeaders = 0;// TODO:strdup(fetch->__attributes.requestHeaders);
В качестве временного решения достаточно просто назначить его себе
fetch->__attributes.requestHeaders = fetch->__attributes.requestHeaders
И тогда вы сможете использовать второй случай из моего вопроса:
static const char* custom_headers[3] = {"Token", "00000000-0000-0000-0000-000000000000", nullptr};
attr.requestHeaders = custom_headers;
Других решений пока нет …