文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

在java项目中使用java.net.URLConnection实现一个发送HTTP请求功能

2023-05-31 14:08

关注

这期内容当中小编将会给大家带来有关在java项目中使用java.net.URLConnection实现一个发送HTTP请求功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一、前言

如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求。

Java有原生的API可用于发送HTTP请求,即java.net.URLjava.net.URLConnection,这些API很好用、很常用,但不够简便;

所以,也流行有许多Java HTTP请求的framework,如,Apache的HttpClient。

目前项目主要用到Java原生的方式,所以,这里主要介绍此方式。

二、运用原生Java Api发送简单的Get请求、Post请求步骤

       1.通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection

       2.设置请求的参数

       3.发送请求

       4.以输入流的形式获取返回内容

       5.关闭输入流

三、发送请求与接收响应流类 HttpRequestor

package me.http;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.HttpURLConnection;import java.net.InetSocketAddress;import java.net.Proxy;import java.net.URL;import java.net.URLConnection;import java.util.Iterator;import java.util.Map;public class HttpRequestor {  private String charset = "utf-8"; private Integer connectTimeout = null; private Integer socketTimeout = null; private String proxyHost = null; private Integer proxyPort = null;   public String doGet(String url) throws Exception {    URL localURL = new URL(url);    URLConnection connection = this.openConnection(localURL);  HttpURLConnection httpURLConnection = (HttpURLConnection)connection;    httpURLConnection.setRequestProperty("Accept-Charset", charset);  httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");    InputStream inputStream = null;  InputStreamReader inputStreamReader = null;  BufferedReader reader = null;  StringBuffer resultBuffer = new StringBuffer();  String tempLine = null;  //响应失败  if (httpURLConnection.getResponseCode() >= 300) {   throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());  }    try {   inputStream = httpURLConnection.getInputStream();   inputStreamReader = new InputStreamReader(inputStream);   reader = new BufferedReader(inputStreamReader);      while ((tempLine = reader.readLine()) != null) {    resultBuffer.append(tempLine);   }     } finally {      if (reader != null) {    reader.close();   }      if (inputStreamReader != null) {    inputStreamReader.close();   }      if (inputStream != null) {    inputStream.close();   }     }  return resultBuffer.toString(); }   public String doPost(String url, Map parameterMap) throws Exception {      StringBuffer parameterBuffer = new StringBuffer();  if (parameterMap != null) {   Iterator iterator = parameterMap.keySet().iterator();   String key = null;   String value = null;   while (iterator.hasNext()) {    key = (String)iterator.next();    if (parameterMap.get(key) != null) {     value = (String)parameterMap.get(key);    } else {     value = "";    }        parameterBuffer.append(key).append("=").append(value);    if (iterator.hasNext()) {     parameterBuffer.append("&");    }   }  }    System.out.println("POST parameter : " + parameterBuffer.toString());    URL localURL = new URL(url);    URLConnection connection = this.openConnection(localURL);  HttpURLConnection httpURLConnection = (HttpURLConnection)connection;    httpURLConnection.setDoOutput(true);  httpURLConnection.setRequestMethod("POST");  httpURLConnection.setRequestProperty("Accept-Charset", charset);  httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  httpURLConnection.setRequestProperty("Content-Length", String.valueOf(parameterBuffer.length()));    OutputStream outputStream = null;  OutputStreamWriter outputStreamWriter = null;  InputStream inputStream = null;  InputStreamReader inputStreamReader = null;  BufferedReader reader = null;  StringBuffer resultBuffer = new StringBuffer();  String tempLine = null;    try {   outputStream = httpURLConnection.getOutputStream();   outputStreamWriter = new OutputStreamWriter(outputStream);      outputStreamWriter.write(parameterBuffer.toString());   outputStreamWriter.flush();   //响应失败   if (httpURLConnection.getResponseCode() >= 300) {    throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());   }   //接收响应流   inputStream = httpURLConnection.getInputStream();   inputStreamReader = new InputStreamReader(inputStream);   reader = new BufferedReader(inputStreamReader);      while ((tempLine = reader.readLine()) != null) {    resultBuffer.append(tempLine);   }     } finally {      if (outputStreamWriter != null) {    outputStreamWriter.close();   }      if (outputStream != null) {    outputStream.close();   }      if (reader != null) {    reader.close();   }      if (inputStreamReader != null) {    inputStreamReader.close();   }      if (inputStream != null) {    inputStream.close();   }     }  return resultBuffer.toString(); } private URLConnection openConnection(URL localURL) throws IOException {  URLConnection connection;  if (proxyHost != null && proxyPort != null) {   Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));   connection = localURL.openConnection(proxy);  } else {   connection = localURL.openConnection();  }  return connection; }   private void renderRequest(URLConnection connection) {    if (connectTimeout != null) {   connection.setConnectTimeout(connectTimeout);  }    if (socketTimeout != null) {   connection.setReadTimeout(socketTimeout);  }   }  public Integer getConnectTimeout() {  return connectTimeout; } public void setConnectTimeout(Integer connectTimeout) {  this.connectTimeout = connectTimeout; } public Integer getSocketTimeout() {  return socketTimeout; } public void setSocketTimeout(Integer socketTimeout) {  this.socketTimeout = socketTimeout; } public String getProxyHost() {  return proxyHost; } public void setProxyHost(String proxyHost) {  this.proxyHost = proxyHost; } public Integer getProxyPort() {  return proxyPort; } public void setProxyPort(Integer proxyPort) {  this.proxyPort = proxyPort; } public String getCharset() {  return charset; } public void setCharset(String charset) {  this.charset = charset; } }

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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