文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在JAVA中发送HTTP请求的方式有哪些

2023-06-06 17:46

关注

在JAVA中发送HTTP请求的方式有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Java是什么

Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。

HttpURLConnection

使用JDK原生提供的net,无需其他jar包;

HttpURLConnection是URLConnection的子类,提供更多的方法,使用更方便。

package httpURLConnection;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;public class HttpURLConnectionHelper { public static String sendRequest(String urlParam,String requestType) {  HttpURLConnection con = null;   BufferedReader buffer = null;   StringBuffer resultBuffer = null;   try {   URL url = new URL(urlParam);    //得到连接对象   con = (HttpURLConnection) url.openConnection();    //设置请求类型   con.setRequestMethod(requestType);    //设置请求需要返回的数据类型和字符集类型   con.setRequestProperty("Content-Type", "application/json;charset=GBK");    //允许写出   con.setDoOutput(true);   //允许读入   con.setDoInput(true);   //不使用缓存   con.setUseCaches(false);   //得到响应码   int responseCode = con.getResponseCode();   if(responseCode == HttpURLConnection.HTTP_OK){    //得到响应流    InputStream inputStream = con.getInputStream();    //将响应流转换成字符串    resultBuffer = new StringBuffer();    String line;    buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK"));    while ((line = buffer.readLine()) != null) {     resultBuffer.append(line);    }    return resultBuffer.toString();   }  }catch(Exception e) {   e.printStackTrace();  }  return ""; } public static void main(String[] args) {  String url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";  System.out.println(sendRequest(url,"POST")); }}

2. URLConnection

使用JDK原生提供的net,无需其他jar包;

建议使用HttpURLConnection

package uRLConnection;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConnection;public class URLConnectionHelper { public static String sendRequest(String urlParam) {  URLConnection con = null;   BufferedReader buffer = null;   StringBuffer resultBuffer = null;   try {    URL url = new URL(urlParam);     con = url.openConnection();    //设置请求需要返回的数据类型和字符集类型   con.setRequestProperty("Content-Type", "application/json;charset=GBK");    //允许写出   con.setDoOutput(true);   //允许读入   con.setDoInput(true);   //不使用缓存   con.setUseCaches(false);   //得到响应流   InputStream inputStream = con.getInputStream();   //将响应流转换成字符串   resultBuffer = new StringBuffer();   String line;   buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK"));   while ((line = buffer.readLine()) != null) {    resultBuffer.append(line);   }   return resultBuffer.toString();  }catch(Exception e) {   e.printStackTrace();  }  return ""; } public static void main(String[] args) {  String url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";  System.out.println(sendRequest(url)); }}

3. HttpClient

使用方便,我个人偏爱这种方式,但依赖于第三方jar包,相关maven依赖如下:

<!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient --><dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version></dependency
package httpClient;import java.io.IOException;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.params.HttpMethodParams;public class HttpClientHelper { public static String sendPost(String urlParam) throws HttpException, IOException {  // 创建httpClient实例对象  HttpClient httpClient = new HttpClient();  // 设置httpClient连接主机服务器超时时间:15000毫秒  httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);  // 创建post请求方法实例对象  PostMethod postMethod = new PostMethod(urlParam);  // 设置post请求超时时间  postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);  postMethod.addRequestHeader("Content-Type", "application/json");  httpClient.executeMethod(postMethod);  String result = postMethod.getResponseBodyAsString();  postMethod.releaseConnection();  return result; } public static String sendGet(String urlParam) throws HttpException, IOException {  // 创建httpClient实例对象  HttpClient httpClient = new HttpClient();  // 设置httpClient连接主机服务器超时时间:15000毫秒  httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);  // 创建GET请求方法实例对象  GetMethod getMethod = new GetMethod(urlParam);  // 设置post请求超时时间  getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);  getMethod.addRequestHeader("Content-Type", "application/json");  httpClient.executeMethod(getMethod);  String result = getMethod.getResponseBodyAsString();  getMethod.releaseConnection();  return result; } public static void main(String[] args) throws HttpException, IOException {  String url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=120.79.75.96";  System.out.println(sendPost(url));  System.out.println(sendGet(url)); }}

4. Socket

使用JDK原生提供的net,无需其他jar包;

使用起来有点麻烦。

package socket;import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.URLEncoder; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; public class SocketForHttpTest {  private int port;  private String host;  private Socket socket;  private BufferedReader bufferedReader;  private BufferedWriter bufferedWriter;  public SocketForHttpTest(String host,int port) throws Exception{   this.host = host;   this.port = port;      // socket = new Socket(this.host, this.port);      socket = (SSLSocket)((SSLSocketFactory)SSLSocketFactory.getDefault()).createSocket(this.host, this.port);  }  public void sendGet() throws IOException{   //String requestUrlPath = "/z69183787/article/details/17580325";   String requestUrlPath = "/";     OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream());   bufferedWriter = new BufferedWriter(streamWriter);      bufferedWriter.write("GET " + requestUrlPath + " HTTP/1.1\r\n");   bufferedWriter.write("Host: " + this.host + "\r\n");   bufferedWriter.write("\r\n");   bufferedWriter.flush();   BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream());   bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8"));   String line = null;   while((line = bufferedReader.readLine())!= null){    System.out.println(line);   }   bufferedReader.close();   bufferedWriter.close();   socket.close();  }  public void sendPost() throws IOException{    String path = "/";    String data = URLEncoder.encode("name", "utf-8") + "=" + URLEncoder.encode("张三", "utf-8") + "&" +       URLEncoder.encode("age", "utf-8") + "=" + URLEncoder.encode("32", "utf-8");    // String data = "name=zhigang_jia";    System.out.println(">>>>>>>>>>>>>>>>>>>>>"+data);       OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream(), "utf-8");    bufferedWriter = new BufferedWriter(streamWriter);        bufferedWriter.write("POST " + path + " HTTP/1.1\r\n");    bufferedWriter.write("Host: " + this.host + "\r\n");    bufferedWriter.write("Content-Length: " + data.length() + "\r\n");    bufferedWriter.write("Content-Type: application/x-www-form-urlencoded\r\n");    bufferedWriter.write("\r\n");    bufferedWriter.write(data);    bufferedWriter.write("\r\n");    bufferedWriter.flush();    BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream());    bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8"));    String line = null;    while((line = bufferedReader.readLine())!= null)    {     System.out.println(line);    }    bufferedReader.close();    bufferedWriter.close();    socket.close();  }  public static void main(String[] args) throws Exception {      //SocketForHttpTest forHttpTest = new SocketForHttpTest("www.baidu.com", 80);      SocketForHttpTest forHttpTest = new SocketForHttpTest("www.baidu.com", 443);   try {    forHttpTest.sendGet();   // forHttpTest.sendPost();   } catch (IOException e) {    e.printStackTrace();   }  } }

看完上述内容,你们掌握在JAVA中发送HTTP请求的方式有哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯