我收到错误“预计400到200”

问题描述:

我已经使用Frisby框架编写API测试用例。当我把网址和凭证到邮递员或DHC,响应来了正常,但在弗里斯比测试用例我收到错误: -我收到错误“预计400到200”

的代码如下: -

var frisby = require('frisby'); 
frisby.create('User Authentication') 

//send the params to below url 
    .post("url", 
     { username: "username", 
     password: "password" 
     }, 
     { json: true, 
     headers: {Accept:'application/json', 
       'Accept-Encoding':'Encoding:gzip, deflate', 
       'Accept-Language':'en-US,en;q=0.8', 
       Connection:'keep-alive', 
       'Content-Length':'107', 
       'Content-Type':'application/json', 
       Host:'url.com', 
       Origin:'http://url.com', 
       Referer:'http://url.com/', 
       'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36', 
       'X-Application-Key':'1234545', 
       'X-Requested-With':'XMLHttpRequest' 
       } 
     } 
    ) 

.expectStatus(200) 
.toss(); 
+0

用户名,密码和网址是假的。 –

+0

任何建议请 –

+0

HTTP 400是'不好的请求',所以请求标题可能有问题。 “接受编码”:'编码:gzip,deflate'看起来很奇怪;如果我是你,我会删除第二个'Encoding:'。 –

请求来了返回为400这是一个HTTP Bad Request

我会做的第一件事就是吐出API回复消息的响应消息体,以查看错误的细节。错误的请求响应往往会告诉你这个请求有什么问题。

由于frisby是异步的,您可以通过使用after()(在折腾之前)确保执行顺序。

.post("https://blah.blah.blah.com", "some json...", "some more json...") 
.expectStatus(200) 
.after(function(err, res, body){ console.log(body); }) 
.toss(); 

如今,弗里斯比的post()接受3个参数:

  • url:网址
  • data:您的POST请求的身体
  • params:参数为弗里斯比后功能后就像告诉它提交json。

因此,看起来你正在发布(可能是创建)用户名/密码对象。

我假设字符串"url"确实是一些有效的url,所以我们可以跳过这个明显的问题。

在没有看到任何错误消息的情况下进行一次狂野拍摄,我将猜测您的问题是您没有向API提供身份验证凭据。我不知道很多API完全打开。通常情况下,你希望像基本身份验证凭据,如果你不为他们提供,你通常会得到一个:

  • 400 bad request如果他们有一个消息说“没有凭据”
  • 404 not found如果不错他们正在玩忸怩作态,不希望非授权人知道有一个有效的资源有
  • 或者甚至一个403 Forbidden

如果它变成是凭证,您在创建后添加他们通话,但在你之前toss()。如果你把它放在post()之前,它会失败。此外,这是API用户名&密码,而不是您尝试在系统中创建的任何用户。有时它们在API的client_idclient_secretAPI_KEYAPI_SECRET中被引用,但它只是一个标识符和一个共享密钥。

所以最后事情会像

.post("https://blah.blah.blah.com", "some json...", "some more json...") 

.auth("api_username", "api_password") 

.expectStatus(200) 

.toss(); 

弗里斯比将明文的用户名/密码转换为一个有效的基本64编码字符串,并在Authorization:头坚持下去(也许就是为什么它需要做的调用post()后)

另外,我喜欢使用addHeader(header, content)明确添加标头,而不是在post()中丢弃一个令人讨厌的json blob,但这只是我的偏好。

祝你好运!