开发技术-postman可以请求通,代码请求不通

使用 FeignClient 调用第三方的接口,在测试环境是没有问题的,但是调用对方的生产环境,出现了 400 错误

<html><body><h1>400 Bad request</h1>
Your browser sent an invalid request.
</body></html>

联系了对方,并没有找到问题在哪。然后使用 postman 请求对方生产环境时,是可以正常返回的。

就很奇怪,同一个 jar 只有请求地址不一样,不应该出现这个问题。

查了一些资料,400 错误基本上就是客户端的问题,可能是请求参数、请求方式不对。

此次 400 错误下面,还有

    at feign.FeignException.errorStatus(FeignException.java:62)
	at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:91)
	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:138)
	at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
	at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
	at com.sun.proxy.$Proxy129.XX(Unknown Source)

接着比对 postman 和 代码的不同,发现,在 postman 新建 post 请求时,header 项是8项

组装好 post 请求后(入参为 json 串),header 变为了9项

 

header 里面多了个 Content-Type

 查看代码发现 FeignClient 里面定义的 headers 为

headers = "application/json;charset=UTF-8"

看来问题就是出现在这里了,没有写标头,参数根本就没有生效。将 headers 修改为

headers = "Content-Type=application/json;charset=UTF-8"

重新编译,再次发布,重新请求成功了。

另外测试了一下不加 headers 时,请求返回

{
    "msg": "Content type 'application/octet-stream' not supported",
    "code": 500
}

 猜测对方的测试环境没有对 header 进行检查

总结一下:

1、postman 可以,代码不行,那指定代码有问题

2、400 错误就是客户端的问题,可能是请求参数的格式、请求方法等不对引起的

又是收获的一天,古德拜

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
如果Postman能够成功发送请求,但前端却无法成功发送请求,可能由以下几个原因导致: 1. 跨域问题:浏览器出于安全考虑,限制了跨域请求Postman不受跨域限制,但前端常只能在相同的域名下发送请求。解决方法可以是在服务器端设置相关的跨域策略,或者使用代理来转发请求。 2. 请求头或参数不正确:前端Postman发送请求时,可能存在请求头或参数的区别。需要检查前端请求是否缺少必要的请求头或参数。可以使用浏览器的开发工具查看前端发送的请求Postman发送的请求头是否一致。 3. 客户端问题:某些情况下,前端请求可能会受到浏览器或设备本身的限制或配置影响。可以尝试在不同的浏览器或设备上测试前端请求,确认问题是否与特定客户端相关。 4. 接口权限问题:某些接口可能需要特定的权限或身份验证才能访问。Postman可能会使用特定的身份验证方式,而前端则需要根据实际需求来提供相应的身份验证信息。需要确认前端发送的请求是否携带了必要的身份验证信息。 5. 代码问题:前端代码中可能存在错误或缺失,导致请求成功。可以检查前端代码是否正确地设置了请求,包括URL、请求方法、请求体等信息。 综上所述,当Postman可以成功发送请求前端无法成功发送请求时,需要从跨域问题、请求头或参数问题、客户端问题、接口权限问题和代码问题等多个方面进行排查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值