java远程调用接口、URL的方式

一:httpUrlConnection

1.获取HttpURLConnection连接对象

   /**
     * 获取HttpURLConnection连接对象
     * @param url 远程调用的url
     * @return
     */
    public static HttpURLConnection getHttpURLConnection(String url){
   
   
        try {
   
   
            //建立连接
            URL httpUrl = new URL(url);
            HttpURLConnection urlConnection =(HttpURLConnection)httpUrl.openConnection();
            //向文件所在服务器发送标识信息,模拟浏览器
            urlConnection.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36");
            return urlConnection;
        } catch (IOException e) {
   
   
            e.printStackTrace();
            return null;
        }

    }

2.远程调用代码

/**
     * 远程调用登录接口
     */
    public void accessLoginUrl(){
   
   
        //远程调用接口的url
        String loginUrl = "http://localhost:8989/login/doLogin";
        OutputStream outputStream = null;
        InputStream inputStream = null;
        ByteArrayOutputStream byteArrayOutputStream = null;
        try {
   
   
            //获取压测接口的userTicket
            URL url = new URL(loginUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //登录是post请求
            connection.setRequestMethod("POST");
            //post请求需要设置接口返回的数据,所以设置为true
            connection.setDoOutput(true);
            //参数userId和密码
            String param = "mobile=" + 13100000000000L + "&password=" + "123456";
            //获取登录接口返回的流文件
            outputStream = connection.getOutputStream();
            outputStream.write(param.getBytes(StandardCharsets.UTF_8));
            outputStream.flush();
            inputStream = connection.getInputStream();
            byteArrayOutputStream = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = inputStream.read(buffer)) >= 0){
   
   
                byteArrayOutputStream.write(buffer, 0, len);
            }
            //获取响应结果
            String response = byteArrayOutputStream.toString();
            ObjectMapper objectMapper = new ObjectMapper()
### Java 远程调用接口 405 错误解决方案 HTTP状态码405表示请求方法不被允许。当尝试通过Java应用进行远程调用而收到此错误时,意味着所使用的HTTP动词(GET, POST等)对于目标资源来说是不允许的或是未配置好的。 #### 可能原因分析 1. **URL路径拼写错误** 如果访问的目标地址有误,则可能导致服务器端无法识别该路由对应的处理逻辑,进而返回405错误响应给客户端[^1]。 2. **HTTP 方法不匹配** 客户端发起的是POST请求但是服务端只支持GET请求,反之亦然;或者是其他类型的HTTP动作如PUT、DELETE等与实际部署的服务不符也会引发此类问题。 3. **跨域资源共享(CORS)设置不当** 对于某些特定环境下的API调用,如果涉及到不同域名间的交互,那么CORS策略可能阻止了预期之外的请求方式,从而触发405 Method Not Allowed错误。 4. **框架或中间件拦截器的影响** 使用Spring MVC或其他Web开发框架构建的应用程序中可能存在自定义过滤器/拦截器,在这些组件里对请求进行了额外验证或修改操作,这同样会改变原始请求的行为模式并最终导致405错误的发生。 #### 解决措施建议 针对上述几种可能性可以采取如下对应措施: - **确认API文档中的正确性**:仔细核对官方提供的RESTful API指南来确保发出的每一个请求都遵循其规定的方式和参数格式。 - **调整HTTP 请求类型**:根据实际情况更改代码里的`RequestMethod.POST`, `@GetMapping`, 或者其他的映射注解以适应后端期望接收的数据提交形式。 - **检查安全性和权限控制机制**:审查是否有任何认证授权过程影响到了正常通信流程,并适当放宽测试期间的安全限制以便快速定位根本原因所在。 - **排查前端代理层配置情况**:如果是经过Nginx之类的反向代理转发过来的话,请务必保证它们之间关于允许哪些method的信息保持一致。 ```java // 修改 HTTP 请求方法的例子 @RequestMapping(value="/example", method= RequestMethod.GET) public ResponseEntity<String> getExample(){ return new ResponseEntity<>("This is a GET request.", HttpStatus.OK); } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随意石光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值