当前位置: 首页 > 知识库问答 >
问题:

https上的邮递员投递预请求失败

毛宏达
2023-03-14

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

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

恐怕这在某种程度上与这样一个事实有关,即我需要调用的endpoint来获取令牌是在超文本传输协议上,而不是在https上,因为在Postman控制台中,我总是收到对同一个url的两个单独的请求,一个在https上,一个在超文本传输协议上。

这是我的预请求脚本

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())
});

这是我在邮递员控制台上看到的

如图所示,第一个请求失败,第二个请求生成401HTTP响应。

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

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

共有2个答案

冀胤运
2023-03-14

根据您的示例代码,我认为您打错了“headers”。如果你把它改成' header '就应该可以了。

雷硕
2023-03-14

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

前脚本存在多个问题:

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

 类似资料:
  • 如何调用POST API请求(具有用户名请求主体的登录API 登录API:POST方法;请求正文:用户名和密码;响应正文:令牌。获取客户记录API:GET方法;请求URI: /token/ 只想在邮递员的一个测试中涵盖这种端到端场景。任何人都可以帮我提供预请求脚本吗?我应该如何调用登录 API?

  • 有人能帮助我如何使用以下参数发送POST请求吗: 我试着在《邮递员的身体》中发送一个带有以下参数的: 然而,在发送上述请求时,我得到的位置字符串为null。

  • 我正试着在邮递员上打API。API正在服务器上工作,但我没有收到任何数据。以下是视觉图像: 它是回应我与“没有数据”和400错误的要求。

  • 我使用Postman6.0发送HTTP请求。为了发送请求,我使用请求前脚本获取令牌并将其放入环境中,以便在后续请求中使用它。 下面的脚本不起作用,因为没有发送正文。下面的剧本有什么问题吗?

  • 我创建了一个简单的Web API项目,我正试图用邮递员软件发布数据,但有些东西不起作用... 我的web api控制器的名称是ValuesController。 我的数据如下所示: 当我将Post方法修改为: 我收到邮递员的“坏请求”信息

  • 我刚刚开始使用Postman测试我正在集成到的API。 我有以下错误不断出现 无效的CORS请求 注意以下几点: API使用承载令牌身份验证(OAuth2)。我有这个工作没有问题 到目前为止,我发现: 使用邮递员与Http POST请求-我没有得到粗体的部分 以防其他人遇到同样的问题,以下是解决方法。在chrome浏览器中https://www.getpostman.com/docs/captur