POST请求在Java客户端中不起作用,但在postman中起作用

bogh5gae  于 2023-02-02  发布在  Java
关注(0)|答案(3)|浏览(610)

我正在尝试对REST端点执行POST请求,但在Java代码下执行时失败。返回的响应状态为403禁止。
我使用的是apache HttpClient,下面是我使用的代码:

var postRequest = new HttpPost(myUrl);
postRequest.addHeader(HttpHeaders.CONTENT_TYPE, TEXT_PLAIN_VALUE);
postRequest.addHeader("x-env", environment);
postRequest.addHeader("apikey", myApiKey);

标题设置正确,有完全相同的值在 Postman 。从我看到的类似职位没有“用户代理”标题可能会导致这一点。设置没有解决我的问题,我的想法用完了。事实上,我手动设置所有的标题从 Postman ,仍然没有运气。
当从Java执行GET到相同的URL上下文时,它可以工作。一些JS客户端也可以使用相同的HTTP头访问完全相同的端点。下面是JS代码:

const cnf = {
  headers: {
    'x-env': 'dev',
    apikey: this.myApyKey,
    'Content-Type': 'text/plain',
  },
};
const data = myRequestBody;
try {
  const res = await axios.post(this.apiPath, data, cnf as AxiosRequestConfig);
    ....

提前感谢您的意见。

8dtrkrch

8dtrkrch1#

尝试检查您的代码是否允许CORS请求?因为在POSTMAN中,即使后端不允许CORS请求,它仍然执行API。但任何编程语言都不是这样。

5lhxktic

5lhxktic2#

我试图发布的URL在AWS中配置很差。我没有注意到URL端点以“/”结束,但在我的Java代码中,我试图访问没有正斜杠的相同URL。

// So this worked:
https://my/path/to/post/resource/

// But this did not
https://my/path/top/post/resource

将53号公路配置为Map带和不带正斜杠的两条路径修复了这个问题。将此作为答案发布,以便其他人在得到相同结果时可以查看。

oprakyz7

oprakyz73#

在我的例子中,我浏览了Postman自动应用的头文件,并将它们与我添加的头文件进行了比较,在Postman中,我点击了头文件,以查找需要哪些头文件才能获得200个响应,并发现它需要头文件“接受”:“/”-我将其添加到我的请求头文件中,它工作了。

String response = Request.Get(link)
                        .addHeader("Authorization", "Bearer " + accessToken)
                        .addHeader("Content-Type", "application/json")
                        .addHeader("Accept","*/*")

相关问题