一、通过JDK网络类Java.net.HttpURLConnection
- 通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)。
- 设置请求的参数。
- 发送请求。
- 以输入流的形式获取返回内容。
- 关闭输入流。
1、发送post请求
package com.Run; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; public class RunTest { /* * 以post方式调用对方接口方法 * @param pathUrl: 请求url * @param data: 请求data * @return : 响应数据 * */ public static String doPost(String pathUrl, String data){ OutputStreamWriter out = null; // 输出流缓存 BufferedReader br = null; // 输入流缓存 String result = ""; // 响应结果 try{ // 创建url对象 URL url = new URL(pathUrl); // 打开和url的链接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设定请求方法 默认GET <POST的请求参数放在http请求的正文内> conn.setRequestMethod("POST"); // 设置30s链接时间 conn.setConnectTimeout(30000); conn.setReadTimeout(30000); // 设置是否向httpUrlConnection输出<POST 参数放在HTTP正文即设为True, 默认False> conn.setDoOutput(true); // 设置是否从httpUrlConnection读入, 默认true conn.setDoInput(true); // Post请求不能使用缓存 conn.setUseCaches(false); // 设置请求属性 即请求头 conn.setRequestProperty("accept", "*/*"); // 接收类型 conn.setRequestProperty("connection", "keep-Alive"); // 维持长链接 conn.setRequestProperty("Content-Type", "application/json;charset=utf-8"); // data内容 // 连接 <请求配置及请求头, 必须在connect之前完成> conn.connect(); /* * 调用第三方http接口发送请求 * */ //获取URLConnection对象对应的输出流 Tips:此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,所以在开发中不调用上述的connect()也可以)。 out = new OutputStreamWriter(conn.getOutputStream(), StandardCharsets.UTF_8); //发送请求参数即数据 System.out.println("请求数据:" + data); out.write(data); // flush输出流的缓冲 //out.flush(); // 不能使用缓存时会报错 java.net.SocketException: Connection reset /* * 获取调用第三方http接口返回的结果 * */ //获取URLConnection对象对应的输入流 InputStream is = conn.getInputStream(); //构造一个字符流缓存 br = new BufferedReader(new InputStreamReader(is)); String str; StringBuilder resultBuilder = new StringBuilder(); while ((str = br.readLine()) != null){ resultBuilder.append(str); } result = resultBuilder.toString(); System.out.println("响应数据:" + result); //关闭流 is.close(); //断开连接,disconnect是在底层tcp socket链接空闲时才切断,如果正在被其他线程使用就不切断。 conn.disconnect(); }catch(Exception e){ e.printStackTrace(); }finally { try { if (out != null){ out.close(); } if (br != null){ br.close(); } } catch (IOException e) { e.printStackTrace(); } } return result; } // 主函数 public static void main(String[] args) { String url = "http://127.0.0.1:8080/"; String data = "{\"name\":\"zhangsan\", \"age\" : \"18\", \"address\": \"beijingshi xichengqu\"}"; String doPostResult = doPost(url+ "postapi", data); System.out.println("doPost 返回信息:" + doPostResult); } }RunTest.java
执行结果:
2、发送get请求
package com.Run; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; public class RunTest { /* * 以get方式调用对方接口方法 * @param pathUrl: url地址 * */ public static String doGet(String pathUrl){ BufferedReader br = null; // 输入流缓存 StringBuilder result = new StringBuilder(); // 响应结果 try{ // 创建URL对象 URL url = new URL(pathUrl); // 打开和url之间的连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设定请求的方法 默认GET; <get的参数时放在url字符串里> conn.setRequestMethod("GET"); // 设置超时连接 conn.setConnectTimeout(30000); conn.setReadTimeout(30000); // 设置是否向HttpURLConnection输出 conn.setDoOutput(true); // 设置是否向HttpURLConnection读入 conn.setDoInput(true); // 设置是否使用缓存 <post不能使用,get 可以不使用> conn.setUseCaches(true); // 设置请求头 conn.setRequestProperty("Accept", "*/*"); conn.setRequestProperty("Connection", "keep-alive"); // 维持长连接 conn.setRequestProperty("Content-Type", "application/json;charset=utf-8"); // 连接 conn.connect(); /* * 获取调用第三方接口返回的结果 * */ // 获取输入流 InputStream is = conn.getInputStream(); // 构造一个字节流缓存 br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8)); String str; while ((str = br.readLine())!=null) { result.append(str); } System.out.println("响应数据:" + result); // 关闭流 is.close(); // 断开连接 <disconnect是在底层tcp socket链接空闲时才切断,如果正在被其他线程使用就不切断> conn.disconnect(); }catch (Exception e){ e.printStackTrace(); }finally { try { if (br != null){ br.close(); } } catch (IOException e) { e.printStackTrace(); } } return result.toString(); } // 主函数 public static void main(String[] args) { String url = "http://127.0.0.1:8080/"; String data = "{\"name\":\"zhangsan\", \"age\" : \"18\", \"address\": \"beijingshi xichengqu\"}"; String doGetResult = doGet(url+"html/login"); System.out.println("doGet 返回信息:" + doGetResult); } }RunTest.java
执行结果:
标签:java,String,url,请求,request,接口,JAVA,conn,out From: https://www.cnblogs.com/phoenixy/p/17414897.html参考地址: