博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java访问远程服务
阅读量:7031 次
发布时间:2019-06-28

本文共 4783 字,大约阅读时间需要 15 分钟。

hot3.png

 随着webService的崛起,我们开始中会越来越多的使用到访问远程webService服务。当然对于不同的webService框架一般都有自己的client包供使用,但是如果使用webService框架自己的client包,那么必然需要在自己的代码中引入它的包,如果同时调运了多个不同框架的webService,那么就需要同时引入多个不同的client包,这样做是很烦的。Java本生提供访问远程服务的包,在java.net.*下。接下来我们就用Java原生的package访问webService。

 

1、发送GET请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class ReadByGet implements Runnable {
    public void run() {
        try {
            URL url = new URL(
                    "http://fanyi.youdao.com/openapi.do?keyfrom=gusi123123&key=1075925116&type=data&doctype=json&version=1.1&q=hello");//此处访问有道的webService服务,参数都在url中
            URLConnection connection = url.openConnection();//得到一个连接对象
            InputStream is = connection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "UTF-8");
            BufferedReader br = new BufferedReader(isr);//用于读取返回的数据流
 
            StringBuffer sb = new StringBuffer();//用于接收返回的数据
            String line = null;
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            System.out.println(sb.toString());
            br.close();//关闭各种连接
            isr.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

2、发送POST请求

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
class ReadByPost implements Runnable {
    public void run() {
        try {
            URL url = new URL("http://fanyi.youdao.com/openapi.do");//此处通过post访问有道webService
            // URLConnection connection = url.openConnection();
            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();//得到一个http的连接对象
            connection.addRequestProperty("encoding", "UTF-8");
            connection.setRequestMethod("POST");//设置请求方式
            connection.setDoInput(true);//设置可写入
            connection.setDoOutput(true);//设置可读取
 
            OutputStream os = connection.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
            BufferedWriter bw = new BufferedWriter(osw);//定义写入流对象
 
            bw.write("keyfrom=gusi123123&key=1075925116&type=data&doctype=xml&version=1.1&q=hello");
            bw.flush();//通过写入流对象写入请求参数
 
            InputStream is = connection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "UTF-8");
            BufferedReader br = new BufferedReader(isr);//定义读取流对象
 
            StringBuffer sb = new StringBuffer();
            String line = null;
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }//通过读取流读取返回数据
 
            //关闭各种连接对象
            br.close();
            isr.close();
            is.close();
            bw.close();
            osw.close();
            os.close();
 
            System.out.println(sb.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

    通过上面也发现使用java原生的package访问webService比较麻烦,然后我们伟大的apache也给我们提供通用的访问webService的jar包,需要的jar包依赖是:(使用到的类在org.apache.http.*)

<dependency>

    <groupId>org.apache.httpcomponents</groupId>

    <artifactId>httpclient</artifactId>

    <version>4.3.6</version>

</dependency>

 

3、通过httpclient发送GET请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class ReadByClientGet implements Runnable {
    HttpClient client = HttpClients.createDefault();
 
    public void run() {
        String uri = "http://www.baidu.com";//访问百度
        HttpGet get = new HttpGet(uri);//得到请求对象
        try {
            HttpResponse response = client.execute(get);//执行访问请求
            HttpEntity entity = response.getEntity();//得到返回数据
            String result = EntityUtils.toString(entity, "UTF-8");//将返回数据输出
            System.out.println(result);
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

4、通过httpclient发送POST请求

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
public class ReadByClientPost implements Runnable {
    HttpClient client = HttpClients.createDefault();//创建一个client对象
    public void run() {
        try {
            String uri = "http://fanyi.youdao.com/openapi.do";//post访问有道webService
            HttpPost post = new HttpPost(uri);//得到post请求对象
            //构造请求参数,通过NameValuePair对象(类似于Map集合)
            List<NameValuePair> parameters = new ArrayList<NameValuePair>();
            parameters.add(new BasicNameValuePair("keyfrom", "gusi123123"));
            parameters.add(new BasicNameValuePair("key", "1075925116"));
            parameters.add(new BasicNameValuePair("type", "data"));
            parameters.add(new BasicNameValuePair("doctype", "json"));
            parameters.add(new BasicNameValuePair("version", "1.1"));
            parameters.add(new BasicNameValuePair("q", "java"));
            post.setEntity(new UrlEncodedFormEntity(parameters,"UTF-8"));
 
            HttpResponse response = client.execute(post);//执行post请求,并且接收返回数据
            HttpEntity entity = response.getEntity();
            String result = EntityUtils.toString(entity, "UTF-8");
            System.out.println(result);//输出返回数据
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    通过上面httpclient只是最简单的基本的访问webService服务。当然还有很多其他细节以及功能可以设计和处理。接下来通过测试方法测试上面的四种访问请求的结果:(输出结果不再粘贴)

1
2
3
4
5
6
7
8
public class Main {
    public static void main(String[] args) {
        // new Thread(new ReadByGet()).start();
        // new Thread(new ReadByPost()).start();
        // new Thread(new ReadByClientGet()).start();
        //new Thread(new ReadByClientPost()).start();
    }
}

转载于:https://my.oschina.net/pvpCC9IFwqz4/blog/425632

你可能感兴趣的文章
[python][os]分离文件目录,文件名以及文件后缀
查看>>
解决Android Studio SDK无法下载问题
查看>>
雷军定AI+IoT为小米核心战略,牵手宜家推进生态布局
查看>>
书评:《All About Java 8 Lambdas》
查看>>
搜狗信息流推荐算法实践
查看>>
Visual Studio 2017 15.6发布
查看>>
2019年Java和JVM生态系统预测:OpenJDK将成为Java运行时市场领导者
查看>>
拥抱PostgreSQL,红帽再表态:SSPL的MongoDB坚决不用
查看>>
架构设计复杂度的6个来源
查看>>
360首席安全官谭晓生宣布离职
查看>>
在敏捷中应用测试驱动开发
查看>>
到底谁应该对软件开发的质量负责?
查看>>
微软Windows Core OS被曝应用了开源组件
查看>>
用Elm语言降低失败的风险
查看>>
资深专家都知道的Docker常用命令
查看>>
谈谈UCloud的秒级在线快照服务
查看>>
Spring Web Services 3.0.4.RELEASE和2.4.3.RELEASE发布
查看>>
EGO走进美团——追寻千亿市场背后的技术力量
查看>>
腾讯正式宣布成立技术委员会,要对组织架构下狠手
查看>>
3·15曝光丨智能机器人一年拨打40亿个骚扰电话,6亿人信息已遭泄露!
查看>>