JAVA——建立HTTP通信(GET/POST方式)

版权声明:DY https://blog.csdn.net/Atishoo_13/article/details/82948222

建立HTTP通信(GET/POST方式)


1.要求

此程序可以建立HTTP通信,以GET方式和POST方式向WEB服务器提交信息,并接收WEB服务器返回的响应。

2.GET和POST请求

GET请求:
  • GET查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据
POST请求
  • POST查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的
  • POST 请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 不能被收藏为书签
  • POST 请求对数据长度没有要求

3.实现过程

  • 使用GET方法进行通信,主要实在建立URL链接后通过URLconnection实例调用getInputStream方法得到数据流,然后进行输出。
  • 使用POST方法进行通信,与GET不用的是需要把请求放在Http正文中。 具体的步骤: 首先,创建URL。 其次打开链接,设置允许读取和上传的权限。 然后,设置读取方式为POST,创建输出流,将向服务器传输的数据一次性写出,再获取输入流,从输入流中读取数据。

4.测试API地址

本文所使用的测试API接口地址如下:

https://cre.dp.sina.cn/api/v3/get?cateid=I&cre=tianyi&mod=wedu&merge=3&statics=1&length=20&tm=1489716199&ad={%22rotate_count%22:1144,%22page_url%22:%22https%3A%2F%2Fedu.sina.cn%2F%22,%22channel%22:%22130270%22,%22platform%22:%22wap%22,%22timestamp%22:1515924429346,%22net%22:null}&action=1&up=2&down=0&length=12&_=1515924436197&callback=Zepto1515924429314 

(若想更换为其他用于测试的API地址可点击此处)

5.代码

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class rw28 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 new GetRun().start();//get请求
	     new PostRun().start();//post请求
	}
}
	class GetRun extends Thread{
	    public void run() {
	        try {
	            //doctype=xml/json/jsonp
	            URL url = new URL("http://www.kuaidi100.com/query?type=yuantong&postid=11111111111");
	            URLConnection connection = url.openConnection();
	            InputStream in = connection.getInputStream();
	            InputStreamReader isr = new InputStreamReader(in,"utf-8");
	            BufferedReader br = new BufferedReader(isr);
	            String line;
	            StringBuilder sb = new StringBuilder();
	            while((line = br.readLine()) != null)
	            {
	                sb.append(line);
	            }
	            br.close();
	            isr.close();
	            in.close();
	            System.out.println("使用GET方式得:\n"+sb.toString());
	        } catch (MalformedURLException e) {
	            e.printStackTrace();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	    }
	}


	class PostRun extends Thread{
	    @Override
	    public void run() {
	        try {
	            URL url = new URL("http://www.kuaidi100.com/query");
	            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
	            connection.addRequestProperty("encoding", "UTF-8");//添加请求属性
	            connection.setDoInput(true);//允许输入
	            connection.setDoOutput(true);//允许输出
	            connection.setRequestMethod("POST");//POST请求要在获取输入输出流之前设置否则报错
	            //输出
	            OutputStream os = connection.getOutputStream();
	            OutputStreamWriter osw = new OutputStreamWriter(os);
	            BufferedWriter bw = new BufferedWriter(osw);
	            bw.write("type=yuantong&postid=11111111111");
	            bw.flush();
	
	            //输入
	            InputStream in = connection.getInputStream();
	            InputStreamReader isr = new InputStreamReader(in,"UTF-8");
	            BufferedReader br = new BufferedReader(isr);
	
	            String line;
	            StringBuilder sb = new StringBuilder();
	            while((line = br.readLine()) != null)
	            {
	                sb.append(line);
	            }
	            bw.close();
	            osw.close();
	            os.close();
	            br.close();
	            isr.close();
	            in.close();
	
	            System.out.println("使用POST方式得:\n"+sb.toString());
	
	        } catch (MalformedURLException e) {
	            e.printStackTrace();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	
	    }
 }

6.结果

编译结果如下图所示:
在这里插入图片描述
运行结果如下图所示:
GET方法:
在这里插入图片描述
POST方法:
在这里插入图片描述

7.GET/POST的区别

  • get请求一般会把参数附着在请求的后面,并用?隔开。这样的话参数容易暴露,类似密码这样的参数等。
    特点:传送的数据是有限制的,一般限制在1kb以下;
    例如:
    Request URL:
http://localhost:8080/JavaWeb_001/actionServlet?user=zhangqin&password=zhangqin&submit=submit
  • post请求的方式传送的表单字段元素以及其数据作为http实体内容发送给web服务器,传送的数据量比get请求大得多。
    如下所示:
Request URL:http://localhost:8080/JavaWeb_001/actionServlet
Request Method:POST
Status Code:404 Not Found
Remote Address:[::1]:8080
Referrer Policy:no-referrer-when-downgrade

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:45
Content-Type:application/x-www-form-urlencoded
Host:localhost:8080
Origin:http://localhost:8080
Referer:http://localhost:8080/JavaWeb_001/login.html
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3004.3 Safari/537.36


user:zhangqin
password:zhangqin
submit:submit     ----请求中传递的数据参数

猜你喜欢

转载自blog.csdn.net/Atishoo_13/article/details/82948222
今日推荐