我收到错误“预计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();
请求来了返回为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_id
和client_secret
或API_KEY
和API_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,但这只是我的偏好。
祝你好运!
用户名,密码和网址是假的。 –
任何建议请 –
HTTP 400是'不好的请求',所以请求标题可能有问题。 “接受编码”:'编码:gzip,deflate'看起来很奇怪;如果我是你,我会删除第二个'Encoding:'。 –