温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在Java中发起一个http请求

发布时间:2021-03-31 16:24:49 来源:亿速云 阅读:363 作者:Leah 栏目:开发技术

这期内容当中小编将会给大家带来有关怎么在Java中发起一个http请求,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一、GET与POST

GET和POST是HTTP的两个常用方法。
GET指从指定的服务器中获取数据
POST指提交数据给指定的服务器处理

1.GET方法

使用GET方法,需要传递的参数被附加在URL地址后面一起发送到服务器。
例如:http://121.41.111.94/submit?name=zxy&age=21
特点:

  • GET请求能够被缓存

  • GET请求会保存在浏览器的浏览记录中

  • 以GET请求的URL能够保存为浏览器书签

  • GET请求有长度限制

  • GET请求主要用以获取数据

2.POST方法

使用POST方法,需要传递的参数在POST信息中单独存在,和HTTP请求一起发送到服务器。
例如:
POST /submit HTTP/1.1
Host 121.41.111.94
name=zxy&age=21

特点:

  • POST请求不能被缓存下来

  • POST请求不会保存在浏览器浏览记录中

  • 以POST请求的URL无法保存为浏览器书签

  • POST请求没有长度限制

实现代码

下面将Java发送GET/POST请求封装成HttpRequest类,可以直接使用。HttpRequest类代码如下:

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map; public class HttpRequest {  /**   * 向指定URL发送GET方法的请求   *   * @param url   *   发送请求的URL   * @param param   *   请求参数,请求参数应该是 name1=value1&name2=value2 的形式。   * @return URL 所代表远程资源的响应结果   */  public static String sendGet(String url, String param) {   String result = "";   BufferedReader in = null;   try {    String urlNameString = url + "?" + param;    URL realUrl = new URL(urlNameString);    // 打开和URL之间的连接    URLConnection connection = realUrl.openConnection();    // 设置通用的请求属性    connection.setRequestProperty("accept", "*/*");    connection.setRequestProperty("connection", "Keep-Alive");    connection.setRequestProperty("user-agent",      "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");    // 建立实际的连接    connection.connect();    // 获取所有响应头字段    Map<String, List<String>> map = connection.getHeaderFields();    // 遍历所有的响应头字段    for (String key : map.keySet()) {     System.out.println(key + "--->" + map.get(key));    }    // 定义 BufferedReader输入流来读取URL的响应    in = new BufferedReader(new InputStreamReader(      connection.getInputStream()));    String line;    while ((line = in.readLine()) != null) {     result += line;    }   } catch (Exception e) {    System.out.println("发送GET请求出现异常!" + e);    e.printStackTrace();   }   // 使用finally块来关闭输入流   finally {    try {     if (in != null) {      in.close();     }    } catch (Exception e2) {     e2.printStackTrace();    }   }   return result;  }  /**   * 向指定 URL 发送POST方法的请求   *   * @param url   *   发送请求的 URL   * @param param   *   请求参数,请求参数应该是 name1=value1&name2=value2 的形式。   * @return 所代表远程资源的响应结果   */  public static String sendPost(String url, String param) {   PrintWriter out = null;   BufferedReader in = null;   String result = "";   try {    URL realUrl = new URL(url);    // 打开和URL之间的连接    URLConnection conn = realUrl.openConnection();    // 设置通用的请求属性    conn.setRequestProperty("accept", "*/*");    conn.setRequestProperty("connection", "Keep-Alive");    conn.setRequestProperty("user-agent",      "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");    // 发送POST请求必须设置如下两行    conn.setDoOutput(true);    conn.setDoInput(true);    // 获取URLConnection对象对应的输出流    out = new PrintWriter(conn.getOutputStream());    // 发送请求参数    out.print(param);    // flush输出流的缓冲    out.flush();    // 定义BufferedReader输入流来读取URL的响应    in = new BufferedReader(      new InputStreamReader(conn.getInputStream()));    String line;    while ((line = in.readLine()) != null) {     result += line;    }   } catch (Exception e) {    System.out.println("发送 POST 请求出现异常!"+e);    e.printStackTrace();   }   //使用finally块来关闭输出流、输入流   finally{    try{     if(out!=null){      out.close();     }     if(in!=null){      in.close();     }    }    catch(IOException ex){     ex.printStackTrace();    }   }   return result;  } }

实例演示

在搭建flask框架文章中,我们已经写好了一个功能模块show(). 该功能模块如下:

#app的路由地址"/show"即为ajax中定义的url地址,采用POST、GET方法均可提交 @app.route("/show",methods=["GET", "POST"]) def show():  #首先获取前端传入的name数据  if request.method == "POST":   name = request.form.get("name")  if request.method == "GET":   name = request.args.get("name")  #创建Database类的对象sql,test为需要访问的数据库名字 具体可见Database类的构造函数  sql = Database("test")  try:   #执行sql语句 多说一句,f+字符串的形式,可以在字符串里面以{}的形式加入变量名 结果保存在result数组中   result = sql.execute(f"SELECT type FROM type WHERE name='{name}'")  except Exception as e:   return {'status':"error", 'message': "code error"}  else:   if not len(result) == 0:    #这个result,我觉得也可以把它当成数据表,查询的结果至多一个,result[0][0]返回数组中的第一行第一列    return {'status':'success','message':result[0][0]}   else:    return "rbq"

下面 我们利用POST方法发起请求,Java代码如下:

 	 //创建发起http请求对象   HttpRequest h = new HttpRequest();   //向121.41.111.94/show发起POST请求,并传入name参数   String content = h.sendPost("http://121.41.111.94/show","name=张新宇");   System.out.println(content);

我们打印出content值,发现就是python中show()返回的json(在Java中,content被识别为String类型,而不是json)

怎么在Java中发起一个http请求

(在转换过程中,不知道出什么问题了,中文显示了unicode编码。但在后面的转json格式后就没有这样的问题了)

字符串转json

Java成功发起Http请求后,由于返回值是String类型,而不是原本python函数中的json格式。所以我们需要将字符串类型转为json格式,并通过键值对的形式得出message对应的值
首先在maven中引入jar包:

<dependency>  <groupId>com.alibaba</groupId>  <artifactId>fastjson</artifactId>  <version>1.2.28</version> </dependency>

转换代码如下:

import com.alibaba.fastjson.JSONObject; JSONObject jsonObject = JSONObject.parseObject(content); System.out.println(jsonObject); System.out.println(jsonObject.getString("message"));

运行结果:

怎么在Java中发起一个http请求

上述就是小编为大家分享的怎么在Java中发起一个http请求了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI