Сбой предварительного запроса на почту

Я пытаюсь настроить предварительный запрос почтальона на получение токена 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 в правильной переменной

Основываясь на вашем примере кода, я считаю, что вы неправильно набрали "заголовки". Это должно работать, если вы измените его на "заголовок".

Другие вопросы по тегам