Как настроить пользовательские поля заголовка для emscripten Fetch API из Stack Overflow

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 использование.

Как именно я могу установить свои собственные поля заголовка запроса?

1

Решение

Причина, по которой он не назначил никаких пользовательских заголовков, действительно глупа — у него еще нет действительной и проверенной реализации в текущей версии:

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;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]