Сбой предварительного запроса на почту
Я пытаюсь настроить предварительный запрос почтальона на получение токена OAuth перед каждым запросом, который я отправляю на службу.
Я пытался следовать различным примерам и руководствам, связанным с этим, и каждый кажется довольно простым, хотя у меня все еще есть проблемы с моим сценарием, так как сценарий предварительного запроса завершается неудачей.
Боюсь, это как-то связано с тем, что конечная точка, которую мне нужно вызвать для получения токена, находится на протоколе http, а не на https, так как в консоли Postman я всегда получаю 2 отдельных запроса на один и тот же URL, один на https и один на http.
Вот мой сценарий перед запросом
pm.expect(pm.environment.has('host')).to.be.true;
pm.expect(pm.environment.has('client_id')).to.be.true;
pm.expect(pm.environment.has('client_secret')).to.be.true;
pm.expect(pm.environment.has('username')).to.be.true;
pm.expect(pm.environment.has('password')).to.be.true;
var options = { method: 'POST',
url: 'http://' + pm.environment.get("host") + '/api/oauth/token',
headers:
{
Authorization: 'Basic '+btoa(pm.environment.get("client_id")+':'+pm.environment.get("client_secret")),
'Content-Type': 'application/x-www-form-urlencoded'
},
form:
{
grant_type: 'password',
username: pm.environment.get('username'),
password: pm.environment.get('password'),
}
};
pm.sendRequest(options, function(err, response) {
console.log(response.json())
});
И вот что я вижу в своей консоли почтальона
Как видно из рисунка, первый запрос не выполняется, а второй генерирует HTTP-ответ 401.
Если я выполняю тот же запрос вне сценария предварительного запроса, что и "обычный" запрос почтальона, на http все работает нормально, но на https я получаю ошибку, так как запрос даже не сделан
Как сделать так, чтобы мой сценарий предварительного запроса работал нормально?
2 ответа
Я наконец понял, в чем проблема.
Было несколько проблем с предварительным сценарием:
1) Двойной ответ на самом деле был связан с двойным предварительным сценарием, один на уровне коллекции и на уровне папки внутри коллекции.
2) Сам запрос нужно было изменить, потому что многие детали были неверными. Как говорил MAT, ключ заголовков был неправильным и должен быть заголовком, но тело также неверно, так как требует определенного формата.
Здесь вы можете найти, что новый запрос работает правильно
pm.expect(pm.environment.has('host')).to.be.true;
pm.expect(pm.environment.has('client_id')).to.be.true;
pm.expect(pm.environment.has('client_secret')).to.be.true;
pm.expect(pm.environment.has('username')).to.be.true;
pm.expect(pm.environment.has('password')).to.be.true;
var options = {
url: 'http://' + pm.environment.get("host") + '/api/oauth/token',
method: 'POST',
header: {
Authorization: 'Basic '+btoa(pm.environment.get("client_id")+':'+pm.environment.get("client_secret")),
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
},
body: {
mode: "urlencoded",
urlencoded: [
{key: "grant_type", value: "password", disabled: false},
{key: "username", value: pm.environment.get('username'), disabled: false},
{key: "password", value: pm.environment.get('password'), disabled: false}
]
}
};
pm.sendRequest(options, function(err, response) {
pm.environment.set("oauth_token", response.json().access_token)
});
Этот предварительный запрос отлично работает и сохраняет oauth_token в правильной переменной
Основываясь на вашем примере кода, я считаю, что вы неправильно набрали "заголовки". Это должно работать, если вы измените его на "заголовок".