Postman post 预请求在 https 上失败
Postman post pre-request failing on https
我正在尝试设置一个 Postman 预请求,以便在我对我的服务发出每个请求之前获取 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 控制台中看到的内容
从图中可以看出,第一个请求失败,第二个请求生成 401 HTTP 响应。
如果我 运行 在预请求脚本之外的请求与 "regular" 邮递员请求在 http 上一切正常,但在 https 上我收到错误,因为请求不均匀制作
如何使我的预请求脚本正常工作?
根据您的示例代码,我认为您输入错误 'headers'。如果将其更改为 'header',它应该可以工作。
我终于明白问题出在哪里了。
pre-script 存在多个问题:
1) 双重响应实际上与双重 pre-script 有关,一个在 collection 级别,另一个在 collection 内的文件夹级别。
2) 请求本身必须更改,因为许多部分不正确。
由于 Mo a 说 header 的密钥是错误的,需要是 header,
但 body 也不正确,因为它需要特定格式。
在这里你可以发现新的请求工作正常
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)
});
这个 pre-request 完美地工作并将 oauth_token 存储在适当的变量中
我正在尝试设置一个 Postman 预请求,以便在我对我的服务发出每个请求之前获取 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 控制台中看到的内容
从图中可以看出,第一个请求失败,第二个请求生成 401 HTTP 响应。
如果我 运行 在预请求脚本之外的请求与 "regular" 邮递员请求在 http 上一切正常,但在 https 上我收到错误,因为请求不均匀制作
如何使我的预请求脚本正常工作?
根据您的示例代码,我认为您输入错误 'headers'。如果将其更改为 'header',它应该可以工作。
我终于明白问题出在哪里了。
pre-script 存在多个问题:
1) 双重响应实际上与双重 pre-script 有关,一个在 collection 级别,另一个在 collection 内的文件夹级别。
2) 请求本身必须更改,因为许多部分不正确。 由于 Mo a 说 header 的密钥是错误的,需要是 header, 但 body 也不正确,因为它需要特定格式。
在这里你可以发现新的请求工作正常
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)
});
这个 pre-request 完美地工作并将 oauth_token 存储在适当的变量中