Сбой предварительного запроса на почту - PullRequest
0 голосов
/ 09 января 2019

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

И вот что я вижу в своей консоли почтальона

Postman douple post pre-request on different protocols

Как видно из рисунка, первый запрос не выполняется, а второй генерирует HTTP-ответ 401.

Если я запускаю тот же запрос вне сценария предварительного запроса, что и "обычный" запрос почтальона, на http все работает нормально, но на https я получаю сообщение об ошибке, так как запрос даже не выполняется

Как я могу заставить мой скрипт предварительного запроса работать нормально?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Я наконец понял, в чем проблема.

Было несколько проблем с предскриптом:

1) Двойной ответ фактически был связан с двойным предварительным сценарием, один на уровне коллекции и включенный на уровне папки внутри коллекции.

2) Сам запрос нужно было изменить, так как многие детали были неправильными. Как Мо говорил, что ключ заголовков был неправильным и должен быть заголовком, но также тело не является правильным, поскольку оно требует определенного формата.

Здесь вы можете найти, что новый запрос работает правильно

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 в правильной переменной

0 голосов
/ 09 января 2019

Судя по вашему примеру кода, вы неправильно набрали «заголовки». Это должно работать, если вы измените его на «заголовок».

...