文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用Java发起http请求的流程

2023-06-06 14:35

关注

使用Java发起http请求的流程?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、GET与POST

GET和POST是HTTP的两个常用方法。

GET指从指定的服务器中获取数据

POST指提交数据给指定的服务器处理

1.GET方法

使用GET方法,需要传递的参数被附加在URL地址后面一起发送到服务器。

例如:http://121.41.111.94/submit?name=zxy&age=21

特点:

2.POST方法

使用POST方法,需要传递的参数在POST信息中单独存在,和HTTP请求一起发送到服务器。

例如:

POST /submit HTTP/1.1
Host 121.41.111.94
name=zxy&age=21

特点:

实现代码

下面将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 {  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", "* 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请求的流程

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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