精华内容
下载资源
问答
  • Java如何发起http请求

    千次阅读 多人点赞 2021-02-22 21:01:06
    Java如何发起http请求前言一、GET与POST1.GET方法2.POST方法实现代码实例演示字符串转json结束 前言 在未来做项目中,一些功能模块可能会采用不同的语言进行编写。这就需要http请求进行模块的调用。那么下面,我将...

    前言

    在未来做项目中,一些功能模块可能会采用不同的语言进行编写。这就需要http请求进行模块的调用。那么下面,我将以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)
    在这里插入图片描述
    (在转换过程中,不知道出什么问题了,中文显示了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请求,从而调用由python编写的功能模块。在使用python编写功能模块时,可以返回json格式的数据。在之后使用Java进行调用时,使用工具进行转换得出需要的数据。

    展开全文
  • Java如何发起HTTP请求

    2021-02-23 14:53:29
    那么下面,我将以Java为例,详细说明如何发起http请求。 一、GET与POST GET和POST是HTTP的两个常用方法。 GET指从指定的服务器中获取数据 POST指提交数据给指定的服务器处理 1.GET方法 使用GET方法,需要传递的参数...

    前言

    在未来做项目中,一些功能模块可能会采用不同的语言进行编写。这就需要http请求进行模块的调用。那么下面,我将以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;
        }
    }
    
    
    展开全文
  • Java如何发起http请求 前言 一、GET与POST 1.GET方法 2.POST方法 实现代码 实例演示 字符串转json 结束 前言 在未来做项目中,一些功能模块可能会采用不同的语言进行编写。这就需要http请求进行模块的调用。那么下面...

    Java如何发起http请求
    前言
    一、GET与POST
    1.GET方法
    2.POST方法
    实现代码
    实例演示
    字符串转json
    结束
    前言
    在未来做项目中,一些功能模块可能会采用不同的语言进行编写。这就需要http请求进行模块的调用。那么下面,我将以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;
        }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    实例演示
    在搭建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"
                
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    下面 我们利用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);         
    1
    2
    3
    4
    5
    我们打印出content值,发现就是python中show()返回的json(在Java中,content被识别为String类型,而不是json)

    (在转换过程中,不知道出什么问题了,中文显示了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>
              
    1
    2
    3
    4
    5
    6
    转换代码如下:

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

    立即学习:  java 对接硬件物联网设备 点击进入 智慧消防解决方案

    展开全文
  • 原文标题:Java如何发起http请求发布时间:2021-02-22 22:31:38前言在未来做项目中,一些功能模块可能会采用不同的语言进行编写。这就需要http请求进行模块的调用。那么下面,我将以Java为例,详细说明如何发起http...

    原文作者:来日方长 。

    原文标题:Java如何发起http请求

    发布时间:2021-02-22 22:31:38

    前言

    在未来做项目中,一些功能模块可能会采用不同的语言进行编写。这就需要http请求进行模块的调用。那么下面,我将以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> 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)

    d0ed203d686e72f003243d03b5f9b354.gif

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

    字符串转json

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

    首先在maven中引入jar包:

    com.alibaba

    fastjson

    1.2.28

    转换代码如下:

    import com.alibaba.fastjson.JSONObject;

    JSONObject jsonObject = JSONObject.parseObject(content);

    System.out.println(jsonObject);

    System.out.println(jsonObject.getString("message"));

    运行结果:

    d0ed203d686e72f003243d03b5f9b354.gif

    结束

    以上就是Java发起http请求,从而调用由python编写的功能模块。在使用python编写功能模块时,可以返回json格式的数据。在之后使用Java进行调用时,使用工具进行转换得出需要的数据。

    Post Views:

    7

    展开全文
  • 那么下面,我将以Java为例,详细说明如何发起http请求。 一、GET与POST GET和POST是HTTP的两个常用方法。 GET指从指定的服务器中获取数据 POST指提交数据给指定的服务器处理 1.GET方法 使用GET方法,需要传递的参数...
  • 一个工具类 Java的map与json字符串相互转换 工具类用的是com.alibaba.fastjson的jar包 package utils; import java.util.List; import java.util.Map; import com.alibaba.fastjson.JSON; import ...
  • 注意:get请求中参数值为中文的必须...进行转义http请求类public class SendHttpRequest {/*** post请求方法* @param url 请求地址* @param params 参数* @return*/public static String sendPost(String url, Mappa...
  • import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import ...
  • 如何java发起http请求

    千次阅读 2018-06-06 10:00:17
    注意:get请求中参数值为中文的必须通过URLEncoder.encode("参数","utf-8...http请求类 public class SendHttpRequest { /** * post请求方法 * @param url 请求地址 * @param params 参数 * @return */ pu...
  • java如何发起post请求

    2020-08-30 10:48:19
    public static void send... //创建post请求对象 HttpPost post = new HttpPost("URL"); try { //创建参数集合 List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>(); //添加参数 .
  • 那么下面,我将以Java为例,详细说明如何发起http请求。一、GET与POSTGET和POST是HTTP的两个常用方法。GET指从指定的服务器中获取数据POST指提交数据给指定的服务器处理1.GET方法使用GET方法,需要传递的参数被附加...
  • 发起http请求1.写http请求方法//处理http请求 requestUrl为请求地址 requestMethod请求方式,值为"GET"或"POST"public staticString httpRequest(String requestUrl,String requestMethod,String outputStr){Str...
  • 发起http请求1.写http请求方法//处理http请求 requestUrl为请求地址 requestMethod请求方式,值为"GET"或"POST"public staticString httpRequest(String requestUrl,String requestMethod,String outputStr){Str...
  • 如何java发起http和https请求

    万次阅读 多人点赞 2017-01-03 15:47:02
    发起http请求 1.写http请求方法 //处理http请求 requestUrl为请求地址 requestMethod请求方式,值为"GET"或"POST" public static String httpRequest(String requestUrl,String requestMethod,String outpu
  • 那么下面,我将以Java为例,详细说明如何发起http请求。一、GET与POSTGET和POST是HTTP的两个常用方法。GET指从指定的服务器中获取数据POST指提交数据给指定的服务器处理1.GET方法使用GET方法,需要传递的参数被附加...
  • 在开发过程中,面对与其他系统的对接,目前很多的对接方式都是采取的RESTful风格的Http请求,市面上也有许多的工具类可供我们去发起Http请求,接收响应。那么大家知道吗?若网络是需要代理的时候,我们该如何进行...
  • 最后贴一下这个https工具栏的完整的代码:import java...import java.io.DataOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import jav...
  • } // 执行http请求 response = httpClient.execute(httpPost); System.out.println(response.getStatusLine()); resultString = EntityUtils.toString(response.getEntity(), "utf-8"); System.out.println...
  • 那么下面,我将以Java为例,详细说明如何发起http请求。一、GET与POSTGET和POST是HTTP的两个常用方法。GET指从指定的服务器中获取数据POST指提交数据给指定的服务器处理1.GET方法使用GET方法,需要传递的参数被附加...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 188
精华内容 75
关键字:

java如何发起http请求

java 订阅