文档章节

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

刘付kin
 刘付kin
发布于 2016/12/07 11:09
字数 1332
阅读 5
收藏 0
点赞 0
评论 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
博文 100
码字总数 72832
作品 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
HttpURLConnection的使用  

HttpURLConnection的使用 /* * URL请求的类别分为二类,GET与POST请求。二者的区别在于: * a:) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet, * b:) post与get的不...

QH_C
2015/04/15
0
0
Android网络应用(第一部分

1 应用模式 比较好的做法是使用web服务器完成业务逻辑,这样B/S应用和手机应用可以使用相同的业务逻辑,只有界面层的变化,系统架构统一,可维护性更好。 1.1 连接方式 网络编程的常规模式有...

迷途d书童
2012/04/26
469
0
Android 中判断网络连接和GPS是否可用及HTTPCLIENT使用

大家知道Google支持和发布的Android移动操作系统,主要是为了使其迅速占领移动互联网的市场份额,所谓移动互联网当然也是互联网了,凡是涉及互联网的任何软件任何程序都少不了联网模块的开发...

xztelecomlcs
2017/03/14
0
0
HttpUrlConnection发送GET、POST请求

之前在使用AsyncHttpClient的时候,遇到在Android6.0后找不到HttpClient的问题,后来官方更新了1.4.9版本替换了HttpClient为第三方的cz.msebera.android.httpclient。了解到Google在Android...

一剑围城
2017/05/23
0
0
HttpURLConnection学习

最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文...

的书法上的
2014/08/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ES12-词项查询

1.词项查询介绍 全文查询将在执行之前分析查询字符串,但词项级别查询将按照存储在倒排索引中的词项进行精确操作。这些查询通常用于数字,日期和枚举等结构化数据,而不是全文本字段。 或者,...

贾峰uk
9分钟前
0
0
http状态码与ajax的状态值

ajax状态值 1.1 200 & OK:状态请求成功

litCabbage
12分钟前
0
0
iOS动画效果合集、飞吧企鹅游戏、换肤方案、画板、文字效果等源码

iOS精选源码 动画知识运用及常见动画效果收集 3D卡片拖拽卡片叠加卡片 iFIERO - FLYING PENGUIN 飞吧企鹅SpriteKit游戏(源码) Swift封装的空数据提醒界面EmptyView 沙盒文件浏览与分享调试控...

sunnyaigd
16分钟前
0
0
AngularJS配置.run()块中设置路由事件的监听器以及过滤未经授权的请求

AngularJS中的run方法初始化全局数据,只对全局作用域起作用,如$rootScope.多个控制器之间可以共享数据,如下代码所示: <script type="text/javascript"> var m1 = angular....

孟飞阳
16分钟前
0
0
Java语言学习(十):输入/输出

Java中,I/O操作代表着输入、输出,Java所有的I/O机制都是基于数据流进行输入输出。java.io类包提供了很多的输入输出处理功能方法,大家可以参考下JDK文档中关于I/O的一些处理方法:JDK在线中...

海岸线的曙光
25分钟前
0
0
基于阿里出得ng-Alain搭建后台管理系统

首先跟大家介绍一下ng_Alain(阿里团队出品) ng-alain技术栈基于 Typescript、Angular、g2、@delon 和 ng-zorro-antd,提前了解和学习这些知识会非常有帮助。 ng-alain 脚手架是基于 Angular ...

方宏春
30分钟前
1
0
Spring框架IOC和AOP的实现原理

一、IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转...

HaierBrother
32分钟前
1
0
C++模版编程实现Haskell的函数模式匹配特性[图]

C++模版编程实现Haskell的函数模式匹配特性[图]: 大神 Bartosz Milewski 在2009年写了一篇文章《What Does Haskell Have to Do with C++?》,使用C++实现Haskell函数式编程语言的一些特性。...

原创小博客
33分钟前
1
0
${value}

1、就算 mapper 里面配置的名称是configSql ,在xml 里面配置的时候要注意 报错:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflectio......

职业搬砖20年
39分钟前
1
0
Xamarin 学习笔记 - Layout(布局)

本文翻译自CodeProject文章:https://www.codeproject.com/Articles/1227733/Xamarin-Notes-Xamarin-Forms-Layouts 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案...

葡萄城技术团队
40分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部