Я пытаюсь сделать почтовый запрос к стороннему API.
В этом запросе я должен отправить свое имя пользователя и пароль в заголовке, и он вернет заголовок ответа с X-Auth_token. Проблема в том, что я не получаю X-Auth-Token в заголовке, если я делаю пост с клиента на свой сервер, а затем на API. Если я делаю запрос от Postman непосредственно к URL-адресу API, он работает нормально.
Это код:
СЕРВЕР
app.post("/signin", async (req, res) => {
console.info("BODY", await req.body);
try {
const xToken = await axios.post(loginUrl, {
headers: {
"Content-Type": "application/x-www-form-urlencoded",
"X-Username": req.body.username,
"X-Password": req.body.password,
},
});
console.info(xToken.headers);
//res.send(xToken);
} catch (error) {
console.info("SERVER Error: ", error.message);
}
});
КЛИЕНТ
const signin = async () => {
try {
const TOKEN = await axios.post("http://localhost:3000/signin", {
username: "AGU",
password: "MIOTTI",
});
console.info("TOKEN", TOKEN);
return TOKEN;
} catch (error) {
console.info("CLIENT Error: ", error.message);
}
};
signin();
В чем может быть проблема?
некоторые данные почтальона:
Это заголовок ответа, когда вы пытаетесь сделать пост с почтальоном напрямую на https://api.remarkets.primary.com.ar/auth/getToken:
и это заголовок ответа, когда вы отправляете запросы на экспресс-обслуживание:
@BenchVue Я отредактировал сообщение. Смотрите изображения. Нужно больше?
Спасибо за ваше обновление, я думаю, вы пропустили отправку части Body(x-www-form-urlencoded)` списка ключей/значений и получили часть Body со статусом (статус 200?) Еще раз, я проверил документацию по API. apihub.primary.com.ar Можете указать authentication страницу? Это должно помочь формату X-Username/X-Password (база 64 или нет). В некоторых документах показан пример curl для получения токена. Это увеличит процент, на который вы получите ответ.
@BenchVue idk, если я вас хорошо понимаю, но вы говорите, что я не отправлял контент типа x-www-form-urlencoded? Честно говоря, я не понимаю объяснения. Извините, я нуб.. XD
Я не могу проверить ваш токен api.primary.com.ar, но я отвечу с помощью аналогичного веб-сайта (spotify). Вы можете применить свою проблему. Дайте мне 10 минут, я постараюсь ответить на ваш вопрос.
Я пытаюсь ответить на него. Это не соответствует вашему прямому случаю, но вы можете использовать его. Я думаю, мы можем поговорить о деталях во время конвертации в ваш случай.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


server.jsconst express = require("express")
const axios = require('axios')
const cors = require("cors")
const bodyParser = require('body-parser')
const corsOptions = {
exposedHeaders: 'Authorization',
};
const app = express()
app.use(cors(corsOptions))
app.use(bodyParser())
const loginUrl = 'https://api.remarkets.primary.com.ar/auth/getToken'
app.post("/signin", async (req, res) => {
console.info("BODY", await req.body);
const response = await axios.post(
url = loginUrl,
'',
config = {
headers: {
"X-Username": req.body.username,
"X-Password": req.body.password,
}
})
return res.send(response.headers["x-auth-token"])
});
app.listen(3000, () => { console.info("Listening on :3000") })
client.js файлconst axios = require('axios')
const signin = async () => {
try {
const response = await axios.post("http://localhost:3000/signin", {
username: "<your id>",
password: "<your password>",
});
return Promise.resolve(response.data);
} catch (error) {
return Promise.reject(error);
}
};
signin()
.then(token => {
console.info('token is : ' + token);
})
.catch(error => {
console.info(error.message);
});
npm install express axios cors body-parser
Подтвержденные зависимости
$ npm ls --depth=0
@ D:\temp\working
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
node server.js
node client.js
Результат в клиенте
Axios получают доступ к полям заголовка ответа
Невозможно получить доступ к свойству JSON с дефисом "-"
Хорошо, я возобновляю. Первый шаг: мне нужно, чтобы почтальоны получили ваши полномочия. Можете ли вы подтвердить три пункта? Во-первых, элемент заголовка, я добавил два элемента (X-Username/X-Password) из заголовка Postman по умолчанию. Правильный? Во-вторых, мне нужен раздел тела, можете ли вы показать свою часть тела почтальона? Список ключей/значений x-www.form-urlencooded, у меня нет информации. В-третьих, можете ли вы показать часть тела вашего ответа. Он покажет токен и статус. Последний элемент вы можете удалить свои учетные данные. Я скопировал это.
В вашем почтовом запросе на loginUrl вам нужно добавить в заголовок x-username и x-password. Тело пусто.
Хорошо, я пытаюсь отправить сообщение, но Body не отвечает, просто 200 OK, Вы получили токен доступа?
Реакция тела тоже пуста. Когда вы пытаетесь напрямую сделать запрос с почтальоном, заголовок ответа имеет X-Auth-Token. Но ничего с моей программой
Я думаю, что мы запутались. Когда вы пытаетесь с почтальоном сделать публикацию на api.remarkets.primary.com.ar/auth/getToken с X-Username и X-Password в заголовке, все работает нормально. Заголовок ответа имеет X-Auth_token. Когда вы пытаетесь отправить сообщение с почтальоном на сервер в режиме экспресс, в заголовке ответа нет токена X-Auth.
Я не понимаю, это означает, что «заголовок ответа имеет X-Auth_token».
один комментарий, API: api.remarkets.primary.com.ar/auth/getToken является сторонним... Каждый ваш запрос, я не получаю никакой информации...
Хорошо, я могу получить информацию X-Auth-Token в заголовке ответа Почтальона. Теперь первый шаг сделан. Позвольте мне попробовать по коду.
Можете ли вы поделиться сброшенным экраном почтальона (авторизация, заголовки, тело, URL-адрес POST и статус ответа) со скрытой личной информацией? Это поможет понять, какие
authиспользуются на вашемloginUrlсервере.