Java 发送http请求远程服务器的服务

一、使用的工具类: HttpClients、HttpClient、CloseableHttpClient【发送请求】;

        HttpPut、HttpGet、HttpPost【请求方式:根据接收端指定的请求方法确定】

二、maven 依赖:


  org.apache.httpcomponents
  httpclient
  4.5.2

三、请求url: String url = String.format("http://%s:%s/%s",ip,port,method)

四、代码:根据参数分以下3类:

     1、无参数 

    CloseableHttpClient httpClient = HttpsClient.createDefault();

    HttpGet httpGet = new HttpGet(url);//请求方式根据请求的接口确认

    //设置超时时间 - time1:连接服务器的时间 、time2:请求的时间、time3:读取数据的时间

    RequestConfig config = 

    RequestConfig.custom().setConnectTimeout(time1).setConnectionRequestTimeout(time2).setSocketTimeout(time3).build();

    httpGet.setConfig(config );

 

    CloseableHttpResponse response = httpClient.excute(httpGet);//发送请求

    int statusCode = response.getStatusLine().getStatusCode();//返回状态码 : 200-成功。。。

     if(statusCode  != HttpStatus.SC.OK){    //判断是否请求成功

              System.out.println("请求失败 ,原因 : " +response.getStatusLine());

              throw new Exception("请求失败! 原因 : " +response.getStatusLine());

     }

     HttpEntity httpEntity = response.getEntity();//获取返回的数据

     String result = EntityUtils.toString(httpEntity);

     //之后将result 转换成 JSONObject 获取数据

     JSONObject jo = new JSONObject(JSON.parseObject(result));     

    

     这个过程会抛出异常,同时需要 关闭资源: EntityUtils.consume(httpEntity)、httpClient.close()、response.close()

 

 

     2、参数是字符串【暂时分为2种】

       httpGet.addHeader("Content-Type","application/json ; charset= utf-8"); //请求中参数的格式,都需要的

            a、放在Header中

             在发送请求之前的代码中,加入以下代码:

             HttpGet.addHeader("key1","value1");

            b、放在body中【json】

             Map  map = new HashMap();//可以作为参数传进来

             map.put("key",value); 

             StringEntity entity = new StringEntity(JSON.toJSONString(map))           

             entity.setContentEncoding("UTF-8");

             entity.setContentType("application/json");

              httpGet.setEntity(entity);

 

      3、参数是 文件类型【视频、图片等】--上传文件

       在发送请求之前加入以下代码:

       HttpEntity httpEntity = new InputStreamEntity(new FileInputStream(new File("D:\\1.txt")));

       httpPut.setEntity(httpEntity );   

 

五、使用的时候遇到的错误:

       1、我遇到的场景是  : 先从一个远程服务器上下载文件,再存到另外一个远程服务器上

       HttpEntity httpEntity1= new InputStreamEntity(httpEntity.getContent);//httpEntity 是请求第一个服务器下载下来的

       在获取下载的数据的方法结尾关闭了流 【EntityUtils.consume(entity1 )】,导致在执行上面那个代码时报错

六、了解时间不长,所以如果有什么不对的地方请指出来, 谢谢!

你可能感兴趣的:(http,请求)