#node.js #csv #fetch
Вопрос:
Я использую node.js чтобы получить некоторые данные на веб — сайте, использующем Rest API. Первые шаги :
- Подключитесь к API аутентификации и получите токен аутентификации (JWT)
- Используйте этот токен для последующих вызовов
Пока все работает нормально, я получил большую часть нужных мне данных. Пока мне не понадобилось получить данные из возвращенного CSV-файла из API. Это также в два этапа :
- Получите маркер файла (другой JWT, чем аутентифицированный) :
www.site.fr/api/campain/[CampainID]
- Получите CSV-файл :
www.site.fr/api/campain/[CampainID]/getfile?token=tokenFromPreviousStep
По некоторым причинам, если я использую тестер API (например, talend API), я получаю токен, вызываю файл, все в порядке. Если я сделаю это с помощью fetch : я действительно получу файл, но заголовок CSV неверен !!
Подводя итог, вы можете получить два типа «campain», назовем их «TypeA» и «TypeB», каждый тип возвращает данные CSV с разными заголовками. При использовании выборки узлов при запросе CSV-файла TypeA я получаю правильные записи, но с заголовком TypeB… таким образом, данные неверны, потому что сервер пытается получить некоторые данные, которых у него нет.
Где это становится действительно сложным, так это в том, что :
- Если я получу маркер файла (шаг 1) с помощью тестера API
- Затем я вызываю CSV с помощью fetch -> все хорошо
В то время как если я получу маркер файла с помощью fetch и использую его в следующем вызове -> неправильные заголовки CSV.
Это соответствующий код для статического примера:
// Step 1 get the Campain Token
const campainCall = await fetch("https://website.fr/api/campaigns/251611", {
{ method: "GET", headers: { Authorization: "Bearer AuthentJWT" } }
});
const campaignInfos = await campainCall.json();
const campainToken = "accessToken=" campaignInfos.data.attributes['token-for-campaign-results'];
const fetchURL = campainURL "251611" endpoint campainToken;
// Step 2 get the CSV file
const resp = await fetch(fetchURL,
{ method: "GET", headers: { Authorization: "Bearer AuthentJWT" } });
const respCSV = await resp.text();
console.log(respCSV);
Что еще нужно знать :
- У меня нет ответа 401, токен аутентификации работает нормально
- Как только я получаю правильный файл токен, я могу получить правильный файл либо с браузера вставьте URL-адрес/API тестер/принеси это всегда работает -даже в свежем частная сессии браузера, если я вставить URL-адрес с файлом токен, я получаю правильные данные, так, кажется, это имеет ничего общего с потенциальными файлов cookie
- Если маркер неправильный, файл, который я получаю, всегда неправильный (браузер/выборка)
- Единственный способ, которым я получаю «неправильный» токен, — это получить его из вызова выборки узла
- Я не вижу структурной разницы между «правильным» и «неправильным» файловым маркером :
- Хороший знак :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NfaWQiOjEwMjM2ODIsImlhdCI6MTYxNjE3MjA2MiwiZXhwIjoxNjE2MTc1NjYyfQ.oUeJP3TzTml1ECpqfTKr8o3UP9dkhG6FTWF24kNiW2I
- неправильный знак :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NfaWQiOjEwMjM2ODIsImlhdCI6MTYxNjE3MjI2NywiZXhwIjoxNjE2MTc1ODY3fQ.sWWw6fO-iXqPCZvaDqYQyxLTAw3OgMWKOZDgbedK2dk
- Хороший знак :
- Я попытался скопировать запрос на извлечение узла из инструмента chromedev, чтобы посмотреть, есть ли разница : ничего, токен, который я получаю из выборки, «неправильный», когда тот же самый вызов дал мне хороший токен в браузере.
Я знаю, что это невозможно воспроизвести, но если кто-нибудь даст какой-нибудь совет о том, как я мог бы попытаться все отладить, у меня закончились идеи…
Большое спасибо.
Комментарии:
1. Вы можете использовать jwt.io чтобы декодировать эти JWT, оба они одинаковы, с той лишь разницей, что метки времени issue_at и истечения срока действия. Кроме того, как насчет
Content-Type
заголовка? можете ли вы проверить, одинакова ли она в обоих типах запросов? И последнее, не могли бы вы показать, в чем разница в ответах?2. Другой вопрос: когда вы говорите о неправильности «заголовков», вы имеете в виду заголовки CSV или заголовки http-ответов?
3. @germanio спасибо, я проверил jwt.io, идентификатор доступа-это мой идентификатор пользователя. Идентификатор файла указан в URL-адресе. Я попытаюсь добавить пример хорошего CSV Против плохого CSV, но поясню : если я ожидаю 7 строк с столбцом 1, столбцом 2… Я получаю в плохом CSV 7 строк, но с столбцом B1, столбцом B2… Я действительно говорю о заголовке CSV. Я предполагаю, что, поскольку проблема связана с маркером файла, предоставленным с помощью fetch, это связано с тем, как fetch выполняет вызов, но, как я уже сказал, я скопировал тот же вызов из devtool и получил неправильный маркер. Я еще раз проверю заголовки, спасибо за треки.