文档章节

HttpUrlConnection以GET方式和POST方式请求服务器

刘付kin
 刘付kin
发布于 2016/12/07 11:09
字数 1332
阅读 5
收藏 0

#1:GET方式。这种方式比较简单,直接在URL后面加上参数即可

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;


public class HttpUrlCon {

	public static void main(String[] args) { 
		try {
			
			URL url = new URL("http://localhost:8080/myhome/mypage/JasonTest.do?userName=liufukin");
			HttpURLConnection  httpConn = (HttpURLConnection) url.openConnection();
			   
			// //设置连接属性   
			httpConn.setRequestMethod("GET");// 设置URL请求方法,默认为“GET”
			httpConn.setDoOutput(false);// 禁止 URL 连接进行输出,默认为“false”   
			httpConn.setDoInput(true);// 使用 URL 连接进行输入,默认为“true”   
			httpConn.setUseCaches(false);// 忽略缓存   
			// 设置 《请求头》信息 
			httpConn.setRequestProperty("accept", "*/*");  
			httpConn.setRequestProperty("Content-Type", "application/octet-stream"); //设置的文本类型,此字段必须和和服务器端处理请求流的编码一致,否则无法解析
			httpConn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接   
			httpConn.setRequestProperty("Charset", "UTF-8");
			httpConn.setRequestProperty("BrokerID", URLEncoder.encode("MFTST0", "utf-8"));   
		
			// 前面的操作只是将“请求头”和“正文”组装成request对象,最后真正以HTTP协议发送数据的是下面的getInputStream();
			BufferedReader responseReader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));   
			System.out.println(responseReader.readLine());
			
		}catch (Exception ex) {   
			ex.printStackTrace();   
		}   
	}   
}

#2:POST请求。其实和GET差不多,只是他的参数部分需要以“字符流”的形式处理,在和之前的“请求头”部分信息组装成request对象在发送过去。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;


public class HttpUrlCon {

	public static void main(String[] args) { 
		try {
			
			URL url = new URL("http://localhost:8080/myhome/mypage/JasonTest.do");
			HttpURLConnection  httpConn = (HttpURLConnection) url.openConnection();
			   
			// //设置连接属性   
			httpConn.setRequestMethod("POST");// 设置URL请求方法,默认为“GET”
			httpConn.setDoOutput(true);// 使用 URL 连接进行输出,默认为“false”
			httpConn.setDoInput(true);// 使用 URL 连接进行输入,默认为“true”			httpConn.setUseCaches(false);// 忽略缓存   
			  
			// 设置 《请求头》信息 
			httpConn.setRequestProperty("accept", "*/*");  
			httpConn.setRequestProperty("Content-Type", "application/octet-stream"); //设置的文本类型,此字段必须和和服务器端处理请求流的编码一致,否则无法解析 
			httpConn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接   
			httpConn.setRequestProperty("Charset", "UTF-8");
			httpConn.setRequestProperty("BrokerID", URLEncoder.encode("MFTST0", "utf-8"));   
			
			//发送正文context;其实并非发送,而是将其存储在缓存中,最后和前面设置的“请求头”组装成request对象
			ObjectOutputStream objOutputStrm = new ObjectOutputStream(httpConn.getOutputStream()); 
		    objOutputStrm.writeObject("userName=liufu & pwd=815325"); // 这里发送一个空数据 
		    objOutputStrm.flush(); 
		    objOutputStrm.close(); 
			
			// 前面的操作只是将“请求头”和“正文”组装成request对象,最后真正以HTTP协议发送数据的是下面的getInputStream();
			BufferedReader responseReader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));   
			System.out.println(responseReader.readLine());
			
		}catch (Exception ex) {   
			ex.printStackTrace();   
		}   
	}   
}

#由于经常需要对创建和封装HTTP请求,所以可以把它们整合起来,调用即可产生httpurlconnection对象。

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;


public class HttpUrlCon {
	
//	URL url = new URL("http://192.168.7.127:3000/system/brokers?langCode=zh_CN&ordChnl=M");
//	URL url = new URL("http://192.168.7.130:8080/loadrunnerServer/mypage/dologin.do");
//	URL url = new URL("http://192.168.7.127:3000/clients/026200000/session");

	static HashMap<String, String> commonHashmap = new HashMap<String, String>();
	public static void main(String[] args) { 
		HashMap<String, String> hashMapHead = new HashMap<String, String>();//包含“请求头”的信息
		hashMapHead.put("Content-Type", "application/x-www-form-urlencoded");
		hashMapHead.put("Charset", "UTF-8");
		hashMapHead.put("Connection", "Keep-Alive");
		hashMapHead.put("BrokerID", "MFTST0");

		HashMap<String, String> hashMapBody = new HashMap<String, String>();//包含“请求正文(body)”的信息
		hashMapBody.put("password", "123456789");
		hashMapBody.put("ordChnl", "M");
		
		String urlString = "http://192.168.7.127:3000/clients/026200000/session";
		HttpUrlCon httpUrlCon = new HttpUrlCon();
		HttpURLConnection httpURLConn = httpUrlCon.createPOSTHttpconn(urlString, hashMapHead, hashMapBody);
		if(httpURLConn != null){
			BufferedReader bufferedReader = null;
			try {
				if(HttpURLConnection.HTTP_OK == httpURLConn.getResponseCode()){
					bufferedReader = new BufferedReader(new InputStreamReader(httpURLConn.getInputStream(),"UTF-8"));
					if(bufferedReader.readLine().contains("\"status\":\"S\"")){
						commonHashmap.put("authorization", httpURLConn.getHeaderField("authorization"));
						httpUrlCon.getOrders();
					}
				}
			}catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}   
	
	public void getOrders(){
		HashMap<String, String> hashMapHead = new HashMap<String, String>();//包含“请求头”的信息
		hashMapHead.put("Charset", "UTF-8");
		hashMapHead.put("authorization", commonHashmap.get("authorization"));
		hashMapHead.put("BrokerID", "MFTST0");

		HashMap<String, String> hashMapBody = new HashMap<String, String>();//包含“请求正文(body)”的信息
		hashMapBody.put("from", "2012-01-31Z");
		
		String urlString = "http://192.168.7.127:3000/accounts/0262000001011/orders";
		HttpURLConnection httpURLConn = new HttpUrlCon().createGetHttpConn(urlString, hashMapHead, hashMapBody);
		if(httpURLConn != null){
			BufferedReader bufferedReader = null;
			try {
				if(HttpURLConnection.HTTP_OK == httpURLConn.getResponseCode()){
					bufferedReader = new BufferedReader(new InputStreamReader(httpURLConn.getInputStream(),"UTF-8"));
					System.out.println(bufferedReader.readLine());
				}
			}catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	
	public HttpURLConnection createGetHttpConn(String urlString, HashMap<String, String> hashMapHead, HashMap<String, String> hashMapBody){
		HttpURLConnection  httpConn = null;
		//根据hashMapBody组装需要传给后台的参数,只是以GET的形式发送的话,把他放在URL后面即可
		StringBuffer paramStr = new StringBuffer();
		if(hashMapBody != null){
			Iterator<Map.Entry<String, String>> iterator = hashMapBody.entrySet().iterator();
			while(iterator.hasNext()){
				Map.Entry<String, String> entry = iterator.next();
				paramStr.append(entry.getKey()+ "=" + entry.getValue() + "&");
			}
			if(!paramStr.toString().trim().equals("")){
				paramStr.deleteCharAt(paramStr.length()-1);
				urlString += "?" + paramStr;
			}
		}
		try {
			URL url = new URL(urlString);
			httpConn = (HttpURLConnection) url.openConnection();
			// 根据hashMapHead组装《请求头》信息
			if(hashMapHead != null){
				Iterator<Map.Entry<String, String>> iterator = hashMapHead.entrySet().iterator();
				while(iterator.hasNext()){
					Map.Entry<String, String> entry = iterator.next();
					httpConn.setRequestProperty(entry.getKey(), entry.getValue());
				}
			}
	        return httpConn;
		}catch (Exception ex) {   
			ex.printStackTrace();  
			return null;
		}
	}
	
	
	public HttpURLConnection createPOSTHttpconn(String urlString, HashMap<String, String> hashMapHead, HashMap<String, String> hashMapBody){
		HttpURLConnection  httpConn = null;
		//根据hashMapBody拼接需要发送给后台的正文(body),这个是post形式发送,所以得要用outputstream来发送。
		StringBuffer paramStr = new StringBuffer();
		if(hashMapBody != null){
			Iterator<Map.Entry<String, String>> iterator = hashMapBody.entrySet().iterator();
			while(iterator.hasNext()){
				Map.Entry<String, String> entry = iterator.next();
				paramStr.append(entry.getKey() + "=" + entry.getValue() + "&");
			}
			if(!paramStr.toString().trim().equals("")){
				paramStr.deleteCharAt(paramStr.length()-1);
			}
		}
		try {
			URL url = new URL(urlString);
			httpConn = (HttpURLConnection) url.openConnection();
			// 设置连接属性   
			httpConn.setDoOutput(true);// 使用 URL 连接进行输出   ,默认为false
			httpConn.setDoInput(true);// 使用 URL 连接进行输入   ,默认为true
			httpConn.setUseCaches(false);// 忽略缓存   
			httpConn.setRequestMethod("POST");// 设置URL请求方法   
			// 根据hashMapHead组装《请求头》信息
			if(hashMapHead != null){
				Iterator<Map.Entry<String, String>> iterator = hashMapHead.entrySet().iterator();
				while(iterator.hasNext()){
					Map.Entry<String, String> entry = iterator.next();
					httpConn.setRequestProperty(entry.getKey(), entry.getValue());
				}
			}
			//设置业务逻辑需要传送过去的字段
			DataOutputStream out = new DataOutputStream(httpConn.getOutputStream());
	        out.writeBytes(paramStr.toString());
	        out.flush();
	        out.close(); 
	        return httpConn;
		}catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}   
	}
}

#总结:

GET和post主要的差别是一个在URL后面接参数,而另一个是以正文内容的形式发送给服务器端。特别要注意的是:以post方式发起请求的时候,那个“请求头”的hashMapHead.put("Content-Type", "application/x-www-form-urlencoded");一定要和后台服务器的匹配上才行,否则传过去给服务器的参数无法被解析出来,会发现为null。(注意啊!!!)

© 著作权归作者所有

共有 人打赏支持
刘付kin
粉丝 6
博文 98
码字总数 71383
作品 0
深圳
Android链接网络的三种方法

HttpURLConnection的常用方法 // 获取链接网络的路径 URL url = new URL(strUrl); // 准备开启网络.设置访问网络的配置 HttpURLConnection httpURLConnection = (HttpURLConnection) url .o...

Jaume
2016/07/11
4
0
浅谈android访问http原理

前言 说到HTTP协议,那必须要说说WWW了,WWW是环球信息网(World Wide Web )的缩写,也可以简称为Web,中文名字为“万维网”。简单来说,WWW是以Internet作为传输媒介的一个应用系统,WWW网...

hfk
2016/01/14
0
0
Android开发_网络编程之Http通信

Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序。以下是本人在学习中的总结与归纳。 1. HttpURLConnection接口 首先需要明确的是,Http通信中的POST和GET请求方式的...

zhangty0223
2013/07/22
0
0
Android网络编程之Http通信

Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序。以下是本人在学习中的总结与归纳。 1. HttpURLConnection接口 首先需要明确的是,Http通信中的POST和GET请求方式的...

xiahuawuyu
2012/07/19
0
0
使用java进行http通信

Http通信概述Http通信主要有两种方式POST方式和GET方式。前者通过Http消息实体发送数据给服务器,安全性高,数据传输大小没有限制,后者通过URL的查询字符串传递给服务器参数,以明文显示在浏...

不最醉不龟归
2016/12/28
9
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 Windows 中以服务方式自动重启的原因

针对长时间使用的 Confluence,我们推荐你配置 Confluence 自动随操作系统重启而启动。针对一些 Windows 的服务器,这意味着需要让 Confluence 以服务的方式运行。 有下面 2 种方式来以服务的...

honeymose
52分钟前
2
0
day93-20180920-英语流利阅读-待学习

时尚之觞:外表光鲜靓丽,其实穷得要命 Lala 2018-09-20 1.今日导读 讲到时尚界,我们脑海里浮现的可能都是模特和设计师光鲜靓丽、从容潇洒的模样。可是,最近在法国出版的一本书却颠覆了我们...

飞鱼说编程
今天
4
0
maven的pom.xml用解决版本问题

maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排除一些...

JAVA码猿
今天
2
0
20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
2
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
550
19

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部