java HTTP通信

java HTTP通信

一、相关知识学习

1、 HTTP通信原理

  HTTP是一套计算机通过网络进行通信的规则,HTTP使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息。HTTP遵循请求(Request)/应答(Response)模型,Web浏览器向Web服务器发送请求,Web服务器处理请求并返回适当的应答,所有HTTP连接都被构造成一套请求和应答。
  Http通信主要有两种方式POST方式和GET方式。前者通过Http消息实体发送数据给服务器,安全性高,数据传输大小没有限制,后者通过URL的查询字符串传递给服务器参数,以明文显示在浏览器地址栏,保密性差,最多传输2048个字符。但是GET请求并不是一无是处——GET请求大多用于查询(读取资源),效率高。POST请求用于注册、登录等安全性较高且向数据库中写入数据的操作。

2、 使用URLConnection实现GET请求

具体的步骤:

  • 实例化一个java.net.URL对象;
  • 通过URL对象的openConnection()方法得到一个java.net.URLConnection;
  • 通过URLConnection对象的getInputStream()方法获得输入流;
  • 读取输入流;
  • 关闭资源。
3、使用Http中的POST方法进行Http通信

使用POST进行通信,与GET不用的是需要把请求放在Http正文中。
具体的步骤:

  • 创建URL。
  • 打开链接,设置允许读取和上传的权限。
  • 然后,设置读取方式为POST,创建输出流,将向服务器传输的数据一次性写出
  • 再获取输入流,从输入流中读取数据。

二、训练

任务要求:
  • 编写一个java application应用程序,完成以下功能:
  • 此程序可以建立HTTP通信,以GET方式向WEB服务器提交信息,并接收WEB服务器返回的响应。
  • 此程序可以建立HTTP通信,以POST方式向WEB服务器提交信息,并接收WEB服务器返回的响应。
  • 以上程序工作时URL中各个部分:IP地址或域名、端口、路径等应当能由用户指定。
java程序

GET方式(test1.java)

import java.io.*;//导入java.io包下的所有类
import java.net.*;//导入java.net包下的所有类

public class test1 {
    public static void main(String[] args) {
        new ByGet().start();//开启线程
    }
    static class ByGet extends Thread{ //创建Thread子类       
        public void run() {
            try {
                URL url = new URL("http://fanyi.youdao.com");//实例化一个URL对象,用百度有道翻译进行了测试
                URLConnection connection = url.openConnection();//通过URL对象的openConnection()方法得到一个java.net.URLConnection;
                InputStream is = connection.getInputStream();  // 获取输入流              
                InputStreamReader isr = new InputStreamReader(is,"utf-8");//在InputStreamReader中指定编码,手动指定为UTF-8
                BufferedReader br = new BufferedReader(isr);//实例化一个BufferedReader对象用来存放转换后的字符
                String line;
                StringBuilder builder = new StringBuilder();
                while ((line = br.readLine()) != null) {  // 读取数据
                    builder.append(line+"\n");
                }
                br.close();//关闭流
                isr.close();
                is.close();
                System.out.println(builder.toString());
            } catch (MalformedURLException e) {//异常处理
                e.printStackTrace();//打印异常所在位置及原因
            }
      catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

POST方式方式(test2.java)

import java.io.*;//导入java.io包下的所有类
import java.net.*;//导入java.net包下的所有类

public class test2 {
    public static void main(String[] args) {
        new ByPost().start();//开启线程
    }
    static class ByPost extends Thread{//创建Thread子类
        public void run() {
            try {
                URL url = new URL("http://fanyi.youdao.com/openapi.do");//实例化一个URL对象
                URLConnection connection = url.openConnection();//通过URL对象的openConnection()方法得到一个java.net.URLConnection;
                connection.addRequestProperty("encoding", "UTF-8");//设置请求属性
                connection.setDoInput(true);//允许从服务器上获取数据
                connection.setDoOutput(true);//允许向服务器传输数据
                ((HttpURLConnection) connection).setRequestMethod("POST");//设置请求模式为post请求

                OutputStream os = connection.getOutputStream();// 获取输出流 
                OutputStreamWriter osr = new OutputStreamWriter(os);
                BufferedWriter bw = new BufferedWriter(osr);

                bw.write("keyfrom=<keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=welcome");//指定输入的内容
                bw.flush();

                InputStream is = connection.getInputStream();// 获取输入流 
                InputStreamReader isr = new InputStreamReader(is,"utf-8");//在InputStreamReader中指定编码,手动指定为UTF-8
                BufferedReader br = new BufferedReader(isr);//实例化一个BufferedReader对象用来存放转换后的字符

                String line;
                StringBuilder builder = new StringBuilder();
                while ((line = br.readLine()) != null) {// 读取数据
                	 builder.append(line+"\n");
                }

                bw.close();//关闭流
                osr.close();
                os.close();

                br.close();
                isr.close();
                is.close();

                System.out.println(builder.toString());
            } catch (MalformedURLException e) {//异常处理
                e.printStackTrace();//打印异常所在位置及原因
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
运行效果图

在这里插入图片描述

参考文档

https://blog.csdn.net/little_nai/article/details/52913112

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值