/**
* HTTP请求
* @author hsz
*
*/
public class HttpRequest
{
/**
* 通过URL和URLConnection get方式提交参数给服务器
* @param path
* @param params
* @param enc
* @return
* @throws Exception
*/
private static boolean sendGETRequest (String path,
Map<String, String> params) throws Exception{
//发送地http://192.168.100.91:8080/videoService
// /login?username=abc&password=123
// StringBuilder是用来组拼请求地址和参数
StringBuilder sb = new StringBuilder();
sb.append(path).append("?");
if(params!=null &¶ms.size()!=0){
for (Map.Entry<String, String> entry : params.entrySet()) {
//如果请求参数中有中文,需要进行URLEncoder编码
sb.append(entry.getKey()).append("=")
.append(URLEncoder.encode(entry.getValue(), "utf-8"));
sb.append("&");
}
sb.deleteCharAt(sb.length()-1);
}
URL url = new URL(sb.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
if(conn.getResponseCode()==200){
return true;
}
return false;
}
/**
*我们先从IE浏览器中使用POST方法发送一次:(下面内容可以用HttpWatch看到)
*POST /videoService/login HTTP/1.1
*Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg,
* application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint,
* application/msword, application/QVOD, application/QVOD,
*Referer: http://192.168.100.91:8080/videoService/login.jsp
*Accept-Language: zh-CN,en;q=0.5
*User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB6.5; SLCC2; .NET CLR 2.0.50727;
* .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)
*Content-Type: application/x-www-form-urlencoded//POST请求这个一定要设置
*Accept-Encoding: gzip, deflate
*Host: 192.168.100.91:8080
*Content-Length: 26//还有发送内容长度也要设置
*Connection: Keep-Alive
*Cache-Control: no-cache
*Cookie: JSESSIONID=7E1435CB8A071D07A430453250348C41
*username=asd&password=1234//这里是请求体部分,一共26个字节,与Content-Length长度一样
*/
/**
* 通过URL和URLConnection post方式提交参数给服务器
* @param path
* @param params
* @param enc
* @return
* @throws Exception
*/
private static boolean sendPOSTRequest(String path,
Map<String, String> params) throws Exception{
// StringBuilder是用来组拼请求参数
StringBuilder sb = new StringBuilder();
if(params!=null &¶ms.size()!=0){
for (Map.Entry<String, String> entry : params.entrySet()) {
sb.append(entry.getKey()).append("=")
.append(URLEncoder.encode(entry.getValue(), "utf-8"));
sb.append("&");
}
sb.deleteCharAt(sb.length()-1);
}
// entity为请求体部分内容
//如果有中文则以UTF-8编码为username=%E4%B8%AD%E5%9B%BD&password=123
byte[] entity = sb.toString().getBytes();
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("POST");
//要向外输出数据,要设置这个
conn.setDoOutput(true);
//内容类型Content-Type: application/x-www-form-urlencoded
//内容长度Content-Length:
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", entity.length+"");
OutputStream os = conn.getOutputStream();
//以POST方式发送请求体,这时才真正开始联网
os.write(entity);
if(conn.getResponseCode()==200){
return true;
}
return false;
}
/**
*在遇上HTTPS安全模式或者操作cookie的时候使用HTTPclient会方便很多,也是android内部集成的
* 使用HTTPClient(开源项目)向服务器提交参数
*/
private static boolean sendPOSTRequestHttpClient(String path,
Map<String, String> params) throws Exception{
//封装请求参数
List<NameValuePair> pair = new ArrayList<NameValuePair>();
if(params!=null&& !params.isEmpty()){
for(Map.Entry<String, String> entry:params.entrySet()){
pair.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
//把请求参数变成请求体部分
UrlEncodedFormEntity uee = new UrlEncodedFormEntity(pair, "utf-8");
//使用HttpPost对象设置发送的URL路径
HttpPost post = new HttpPost(path);
//发送请求体
post.setEntity(uee);
//创建一个浏览器对象,以把POST对象向服务器发送,并返回响应消息
DefaultHttpClient dhc = new DefaultHttpClient();
//执行post请求
HttpResponse response = dhc.execute(post);
if(response.getStatusLine().getStatusCode()==200){
Log.i("http", "httpclient");
//获取返回实体
HttpEntity httpEntity = response.getEntity();
return true;
}
return false;
}
}
分享到:
相关推荐
以下是对Android联网功能的详细说明: 1. **Android SDK中的网络组件** - `java.net`包:提供了基本的网络通信类,如Socket和ServerSocket,以及对HTTP协议的支持。 - `java.io`包:尽管不直接涉及网络,但提供了...
在Android开发中,判断设备联网状态是至关重要的,这关系到应用能否正常访问网络资源,如下载数据、发送请求或接收推送。以下是一篇详细解释如何在Android中判断WIFI和GPRS(2G/3G)联网状态的教程。 首先,我们...
在Android开发中,联网是一项基本且重要的技能,它使得应用能够获取远程数据、与服务器进行交互,从而实现各种丰富的功能。本教程将深入探讨“Android简单联网”的概念及其实践。 一、Android网络访问基础 1. 网络...
总结来说,Android联网优化主要包括:合理使用线程池控制后台线程,以降低系统资源消耗;自定义HTTP客户端以定制网络请求的细节,提高请求效率和稳定性;采用单例模式确保网络组件的唯一性,减少资源占用。通过这些...
#### Android联网功能详解 Android基于Linux内核,因此具备一系列强大的联网功能。若想实践本文中的示例,需先下载并安装Android SDK。以下是一些与网络相关的包及其功能介绍: - **java.net**:提供与联网相关的...
【Android OkHttp 联网框架详解】 OkHttp 是一个高效、强大且广泛使用的网络通信库,由 Square 公司开发并开源。它为 Android 应用程序提供了简单易用的 API,使得开发者能够轻松地进行 HTTP 请求和响应操作。...
标题中的“Google系列Android手机无法联网问题的解决方法”指的是Google生产的Android设备,如LG Nexus、Pixel系列等手机,遇到无法接入网络的问题。这可能是由于多种原因,包括但不限于软件设置错误、网络配置问题...
【基于Android数独联网对战APP】是一款集成了多人在线竞技和单机模式的数独游戏应用,旨在为玩家提供一个既可以独立练习又能与他人实时对战的平台。这款APP包含的功能主要有联网对战、单人游戏、排行榜展示以及用户...
本文档的标题为“基于Android开发的车联网APP设计”,它详细阐述了一个基于Android平台开发的车联网移动应用程序的设计理念与实现过程。 首先,文档提出了背景介绍,指出了智能交通技术成为研究热点,并且车联网...
从文件内容中可以看出,所研究的“基于Android平台的车联网信息管理系统”就是这样一个尝试,旨在通过移动设备提供车辆信息管理以及相关的增值服务。接下来,我们从几个方面详细阐述该系统的主要知识点。 首先,车...
标题中的“WiFi声波联网Android Demo”是一种技术实现方式,主要应用于移动设备,尤其是Android操作系统上的应用程序。这种技术利用声波来传输数据,比如网络连接信息,使得设备可以通过声音进行WiFi连接,无需手动...
Android联网,传输下载文件等要用到的类
GoogleIO2013 Android快速联网框架Volley Volley提供的功能 JSON,图像等的异步下载; 网络请求的排序(scheduling) 网络请求的优先级处理 缓存 多级别取消请求 和Activity和生命周期的联动(Activity结束时...
文章《基于Android平台的车联网系统的设计与实现》主要介绍了设计并实现了一种基于Android平台的车联网系统。该系统设计的目标是通过收集和分析车辆运行数据以及周边环境信息,向驾驶员提供一系列便捷的服务功能,如...
在Android开发中,判断设备是否联网是至关重要的功能,它能确保应用在需要网络的时候能够正常工作,并在无网络连接时给予用户适当的反馈。本文将详细介绍如何在Android中检查网络状态,以及如何根据网络状态提示用户...
【Android联网实现】 Android平台为开发者提供了丰富的网络功能,使其能轻松实现应用程序的联网功能。主要的联网方式包括使用WIFI和GPRS两种,适用于各种网络环境。Android平台的网络功能基于Linux内核,提供了多样...
在Android开发中,集成百度定位服务和车联网天气查询功能是一项常见的需求,这有助于提升应用程序的实用性和用户体验。本文将深入探讨如何在Android应用中实现这些功能,并基于提供的"Android例子源码使用百度定位和...