我有一个非常简单的请求,可以在我的本地系统上完美运行。但是,每当我在UAT服务器上使用相同的请求时,它都会返回一个Error 400
,它等同于一个错误的请求。
我了解到,这意味着请求的语法可能有问题,或者可能有任何错误。但是,当我在本地计算机上使用我的请求时,它可以工作,所以我想这意味着我的代码可以正常工作。
因此,我用尽了应该检查哪些部分才能完成这项工作的想法。下面是我标记的代码,以指示哪些是从本地使用的,哪些是从UAT服务器使用的:
来自本地:
public static String getConsumerBill(String accNum) {
//getToken() is a method that returns a Token object that I made
Token accessToken = getToken();
HttpResponse<String> httpResponse = null;
try {
httpResponse = Unirest.post("http://api.nuvelco.com/v1/bill/inquiry")
.header("accept", "application/json")
.header("content-type", "application/json")
.header("authorization", "Bearer " + response.getAccess_token())
.header("cache-control", "no-cache")
.body("{\"accountNo\":\"" + accNum + "\"}")
.asString();
} catch (UnirestException e) {
e.printStackTrace();
}
return httpResponse.getBody();
}
来自UAT服务器
public static String getConsumerBill (String accNum) {
Token accessToken = getToken();
HttpResponse<String> httpResponse = null;
try {
/*
urlInquiry is a global variable that gets its value from a database
the value it gets is the same as the url from above
*/
httpResponse = Unirest.post(urlInquiry)
.header("accept", "application/json")
.header("content-type", "application/json")
.header("authorization", "Bearer " + accessToken.getAccess_token())
.header("cache-control", "no-cache")
.body("{\"accountNo\":\"" + accNum + "\"}")
.asString();
} catch (UnirestException e) {
e.printStackTrace();
}
return httpResponse.getBody();
}
您可能会说,我唯一的不同是URL。它在我的本地进行了硬编码,而UAT服务器中的一个则从数据库中获取了。除此之外,我不确定UAT版本为什么返回Bad Request
响应。
我本地的请求返回以下响应,错误代码为404,这是正常现象,这意味着它可以正常工作:
{"message":"Invalid account no.","code":1}
来自UAT服务器的一个返回此错误代码400:
{"error": "invalid_grant"}
除此之外,我什至无法打印该正文,但可以打印出状态代码。我想向我们的客户询问此事,但我一直认为请求在我的本地计算机上可以正常工作,这意味着他们的Web服务可以正常工作。
请告诉我是否需要提供其他信息。
答案 0 :(得分:0)
用这些信息很难回答,但是有一些提示:
400错误请求表示无效/格式错误的请求,不符合服务器端API规则。 使用提供的信息,请索取服务器端日志,以查看发生了什么问题。
请确保通过验证服务器日志在两种情况下都击中相同的服务器/ URL。 第二种情况可能是使用其他服务器-不同的API版本,其中请求模型可能已更改?
根据需要使用Chrome Advanced REST Client或SoapUI之类的工具进行调试。