Проблема в том, что вы копируете только method
и headers
из запроса, но у него больше свойств, чем у этого. Например, POST-запросы имеют свойство body
, которое не копируется вашим кодом.
Чтобы выполнить выборку, которая наследует все от исходного запроса, кроме URL, выполните:
const response = await fetch(url_without_query_strings, request)
То есть, передайте request
как второй параметр, а не как dict. Это работает, потому что объект запроса имеет имена свойств, точно совпадающие со всеми параметрами, которые ожидает второй параметр fetch()
.
Обратите внимание, что неловко, если вы хотите изменить какое-либо свойство запроса, кроме URL, но оставить другие свойства такими же, тогда вы должны передать запрос как параметр first и указать изменения в Второй параметр:
const response = await fetch(request, {headers: myHeaders})
Это означает, что если вы хотите изменить URL и какого-либо другого свойства, вам нужно выполнить два шага - сначала создайте новый объект Request
, который изменяет URL, а затем измените заголовки:
let request2 = new Request(newUrl, request)
const response = await fetch(request2, {headers: myHeaders})
Или, конечно, вы можете сделать обратный порядок:
let request2 = new Request(request, {headers: myHeaders})
const response = await fetch(newUrl, request2)
Или, в качестве альтернативы, для конкретного случая заголовков вы можете воспользоваться тем фактом, что после создания собственного Request
объекта вы можете напрямую изменять его заголовки:
let request2 = new Request(newUrl, request)
request2.headers.set("X-Foo", "Bar")
const response = await fetch(request2)