HttpClient调用405 Not Allowed

介绍

HTTP 405 错误,也被称为 “Method Not Allowed”,是一个常见的 HTTP 状态码。这个错误通常意味着客户端(例如,一个网页浏览器或一个应用程序)尝试使用服务器不支持的 HTTP 方法(例如 GET、POST、PUT、DELETE 等)来访问某个资源。

例如,如果一个 API 只支持 GET 和 POST 方法,而客户端尝试使用 PUT 或 DELETE 方法来访问它,服务器可能会返回一个 405 错误。

背景

使用httpclient封装工具、发送post请求、使用postman访问接口时正常响应、工具类返回405,最后发现是自己url拼接问题,是个很基础的bug,自己浪费了很多时间排查所以记录一下

private String postUrlEncode(String url,Map<String, String> para){

        try {
            HttpPost post = new HttpPost(url);
            post.addHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_FORM_URLENCODED.getMimeType());

            List<NameValuePair> pairs = new ArrayList<>();
            for (String key : para.keySet()){
                pairs.add(new BasicNameValuePair(key,para.get(key)));
            }
            log.info("http req -> {}", JSONObject.toJSONString(pairs));
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs);
            post.setEntity(entity);
            CloseableHttpResponse response = closeableHttpClient.execute(post);
            String resp = EntityUtils.toString(response.getEntity());
            log.info("http resp -> {}", resp );
           
            return resp;
        } catch (Exception e) {
            throw new CloudcardException(RespCodeEnums.HTTP_ERROR.getRespCode(), "远程调用异常");
        }
    }

原因

常见的405错误可能存在的原因

1、发送服务端不支持的请求类型
2、url的路径不正确

我的项目是因为获取url时配置拼接漏了部分path、访问到另外的接口导致405、修改为正确地址就可以。

你可能感兴趣的:(java)