0

我正在尝试设置一个邮递员预请求,以便在我向我的服务发出的每个请求之前获取一个 OAuth 令牌。

我尝试遵循与此相关的各种示例和指南,每个示例和指南看起来都非常简单,尽管由于预请求脚本失败,我的脚本仍然存在问题。

恐怕这与我需要调用以获取令牌的端点位于 http 协议而不是 https 的事实有关,因为在 Postman 控制台中,我总是收到 2 个对同一个 url 的单独请求,一个 on 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 控制台中看到的内容

邮递员对不同协议的双重发布预请求

从图中可以看出,第一个请求失败,第二个请求生成 401 HTTP 响应。

如果我在预请求脚本之外运行与 http 上的“常规”邮递员请求相同的请求,一切正常,但在 https 上我收到错误,因为请求甚至没有发出

如何使我的预请求脚本正常工作?

4

2 回答 2

4

我终于弄清楚了问题所在。

预脚本存在多个问题:

1)双重响应实际上与双重预脚本有关,一个在集合级别,一个在集合内的文件夹级别。

2)由于许多部分不正确,因此必须更改请求本身。正如Mo a所说,标题键错误并且需要是标题,但正文也不正确,因为它需要特定的格式。

在这里您可以找到新的请求正常工作

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 存储在适当的变量中

于 2019-01-09T22:06:41.593 回答
0

根据您的示例代码,我相信您输入了错误的“标题”。如果您将其更改为“标题”,它应该可以工作。

于 2019-01-09T15:51:07.797 回答