Android 之http编程

源码:
package com.http.get; import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; public class HttpUtils { private static String urlPath="http://i6.topit.me/6/5d/45/1131907198420455d6o.jpg";
private static HttpURLConnection httpURLConnection=null;
public HttpUtils() {
// TODO Auto-generated constructor stub
}
public static InputStream getInputStream() throws IOException{
InputStream inputStream=null;
URL url=new URL(urlPath);
if(url!=null){
httpURLConnection=(HttpURLConnection)url.openConnection();
httpURLConnection.setConnectTimeout();
httpURLConnection.setDoInput(true);
httpURLConnection.setRequestMethod("GET");
int code=httpURLConnection.getResponseCode();
if(code==){
inputStream=httpURLConnection.getInputStream();
}
}
return inputStream;
}
public static void getImgToDisk() throws IOException{
InputStream inputStream=getInputStream();
FileOutputStream fileOutputStream=new FileOutputStream("D:\\TEST.png");
byte[] data=new byte[];
int len=;
while((len=inputStream.read(data))!=-){
fileOutputStream.write(data, , len);
}
if(inputStream!=null)
inputStream.close();
if(fileOutputStream!=null)
fileOutputStream.close();
}
public static void main(String[] args) throws IOException {
getImgToDisk();
}
}
案例2:以Java接口POST方式向服务器提交用户名和密码,在服务器端进行简单判断,如果正确返回字符串success,否则返回fail
服务器端简单校验:
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter();
//String jsonString =JsonTools.createJsonString("person", service.getPerson());
String name = request.getParameter("username");
String pwd = request.getParameter("password");
if (name.equals("admin")&&pwd.equals("")) {
out.print("success");
}
else {
out.print("fail");
}
out.flush();
out.close();
}
客户端的提交:
package com.http.post;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map; import sun.net.www.http.HttpClient; public class HttpUtils { private static String PATH="http://122.206.79.193:8080/myhttp/servlet/LoginAction";
private static URL URL;
static{
try {
URL=new URL(PATH);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public HttpUtils() {
// TODO Auto-generated constructor stub
} /**
*
* @param params 填写的参数
* @param encode 字节编码 为了避免乱码
* @return 从服务端返回的信息
* @throws Exception
*/
public static String sendPostMessage(Map<String,String>params,String encode) throws Exception{
StringBuffer sb=new StringBuffer();
if(params!=null&&!params.isEmpty()){
for(Map.Entry<String,String> entry:params.entrySet()){
sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(),encode)).append("&");
}
sb.deleteCharAt(sb.length()-);
HttpURLConnection httpURLConnection=(HttpURLConnection)URL.openConnection();
httpURLConnection.setConnectTimeout();
httpURLConnection.setDoInput(true);//从服务器获取数据
httpURLConnection.setDoOutput(true);//向服务器提交数据
//获得上传信息字节大小及长度
byte[] data=sb.toString().getBytes();
//浏览器内置封装了http协议信息,但是手机或者用Java访问时并没有 所以最重要的是需要设置请求体的属性封装http协议
//设置请求体的请求类型是文本类型
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//文本类型
//设置请求体的长度
httpURLConnection.setRequestProperty("Content-Length",String.valueOf(data.length));
//想要向服务器提交数据必须设置输出流,向服务器输出数据
System.out.println(httpURLConnection.toString());
OutputStream out=httpURLConnection.getOutputStream();
out.write(data, , data.length);
out.close();
int code=httpURLConnection.getResponseCode();
if(code==){
return changeInputStream(httpURLConnection.getInputStream(),encode);
} }
return "";
}
private static String changeInputStream(InputStream inputStream,String encode) {
// TODO Auto-generated method stub
String resString = "";
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();//内存流
int len = ;
byte[] data = new byte[];
try {
while ((len = inputStream.read(data)) != -) {
outputStream.write(data, , len);
}
resString = new String(outputStream.toByteArray());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resString;
}
public static void main(String[] args) throws Exception {
Map<String,String>params=new HashMap<String, String>();
params.put("username", "admin");
params.put("password", "");
String res=sendPostMessage(params,"utf-8");
System.out.println("-res->>"+res);
}
}
标准Apache接口

package com.http.post; import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair; public class HttpUtils { public HttpUtils() {
// TODO Auto-generated constructor stub
}
public static String sendHttpClientPost(String path,Map<String,String>map,String encode) throws Exception, IOException{ //将参数map进行封装到list中
List<NameValuePair> list=new ArrayList<NameValuePair>();
if(map!=null&&!map.isEmpty()){
for(Map.Entry<String, String> entry:map.entrySet()){
list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
try {
//将请求的参数封装的list到表单,即请求体中
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(list,encode);
//使用post方式提交数据
HttpPost httpPost=new HttpPost(path);
httpPost.setEntity(entity);
DefaultHttpClient client=new DefaultHttpClient();
HttpResponse response= client.execute(httpPost);
//以上完成提交
//以下完成读取服务端返回的信息
if(response.getStatusLine().getStatusCode()==){
return changeInputStream(response.getEntity().getContent(),encode);
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
public static String changeInputStream(InputStream inputStream,String encode) {
// TODO Auto-generated method stub
String resString = "";
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();//内存流
int len = ;
byte[] data = new byte[];
try {
while ((len = inputStream.read(data)) != -) {
outputStream.write(data, , len);
}
resString = new String(outputStream.toByteArray());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resString;
}
public static void main(String[] args) throws Exception, Exception {
String path="http://localhost:8080/myhttp/servlet/LoginAction";
Map<String,String>map=new HashMap<String, String>();
map.put("username", "admin");
map.put("password", "");
String msg=HttpUtils.sendHttpClientPost(path, map, "utf-8");
System.out.println("-->>--"+msg);
} }
Android 之http编程的更多相关文章
- Android中JNI编程的那些事儿(1)
转:Android中JNI编程的那些事儿(1)http://mobile.51cto.com/android-267538.htm Android系统不允许一个纯粹使用C/C++的程序出现,它要求必须 ...
- Android 框架式编程 —— 起篇
一般的,在开发的时候,写过的代码在需求变更后,发现需要改动非常多的地方,那么说明之前的代码的架构肯定是存在问题的. 下面我们结合面向对象的六大基本原则谈Android 框架式编程.首先先介绍一下面向对 ...
- Android 的网络编程
android的网络编程分为2种:基于socket的,和基于http协议的. 基于socket的用法 服务器端: 先启动一个服务器端的socket ServerSocket svr = new ...
- Android手机摄像头编程入门
本讲内容:Android手机摄像头编程入门智能手机中的摄像头和普通手机中的摄像头最大的区别在于,智能机上的摄像头可以由程序员写程序控制, 做一些有趣的应用譬如,画中画,做一些有用的应用譬如二维码识别, ...
- 《Android传感器高级编程》
<Android传感器高级编程> 基本信息 原书名:Professional Android Sensor Programming 原出版社: Wrox 作者: (美)米内特(Greg M ...
- (转载)android开发常见编程错误总结
首页 › 安卓开发 › android开发 android开发常见编程错误总结 泡在网上的日子 / 文 发表于2013-09-07 13:07 第771次阅读 android,异常 0 编辑推荐:稀 ...
- Android Studio NDK编程初探
继上一篇学习了如何使用NDK编译FFMPEG后,接下来就是要学习如何在Android Studio中使用了. 经过参考和一系列的摸索,记录下具体步骤. 创建C++ Support的Android St ...
- (转)android 蓝牙通信编程
转自:http://blog.csdn.net/pwei007/article/details/6015907 Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输. 本文档描述了怎样 ...
- Android BLE 蓝牙编程(三)
上节我们已经可以连接上蓝牙设备了. 本节我们就要获取手环的电池电量和计步啦. 在介绍这个之前我们需要先了解下什么是 服务 什么是 UUID 我们记得上节中我们item监听事件的回调的返回值是Bluet ...
- Android first --- 网络编程
网络编程 ###图片下载查看 1.发送http请求 URL url = new URL(address); //获取连接对象,并没有建立连接 HttpURLConnection conn = (Htt ...
随机推荐
- Spring中的AOP开发
1.代理模式 找个人将你原本想做的事情给做了. 三个部分组成: 抽象主题角色:真实主题和代理主题的共同接口. 真实主题角色:定义了代理角色所代表的真实对象. 代理主题角色:含有对真实主题角色的引用.代 ...
- git/github常用指令、入门
git的基本常用指令: 1.cd:切换路径 2.mkdir:进入文件夹目录 3.pwd:显示当前目录的路径 4.git init:把当前的目录变成可以管理的git仓库,生成隐藏.git文件 5.git ...
- 关于aop的两种方式-基于注解和基于aspectj
spring的aop确实好用,能够在不影响业务功能的情况下,实现一些低耦合的功能. 而aop又有两种常用的实现方式,一种是用aspectj表达式去匹配,实现全局的配置,表达式还可以使用与或非符号去连接 ...
- AHD-模拟高清芯片RN6752替代TVP5150/CJC5150
RN6752功能:2路CVBS转BT656/601/1302高清视频解码芯片.产品特征输入:2路CVBS(不能同时输入)和S-VIDEO(一般不用)输出:BT601/656/1302支持NTSC,PA ...
- 王爽汇编习题2.2(1):给定地址段为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为____到____
此题解题背景默认为8080型CPU,地址总线为16根.(8080-16,8086-20,8088-20,80286-24,80386-32) 16根地址总线寻址能力:(2 ** 16) / 1024 ...
- element ui datePicker 设置当前日期之前的日期不可选
pickerOptions0: { disabledDate(time) { return time.getTime() < Date.now() - 8.64e7 } },
- spring boot认识
Spring Boot的好处: 1.配置简化 2.配合各种starter使用,基本上可以做到自动化配置 3.上手速度快 4.提供运行时的应用监控 运用IDEA创建spring boot项目请查看: h ...
- makefile中":=","=","?=","+=" 之间的区别
区别: := 有关位置的等于,值取决于当时位置的值 = 无关位置的等于,值永远等于最后的值 ?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值 '=':无关位置的等于 比如: x = ...
- setAttribute设置无效
我发现ie浏览器中动态用setAttribute设置style属性值始终不能设置,经过一番查找发现了这篇文字 http://webcenter.hit.edu.cn/articles/2009/05- ...
- Linux修改文件permission属性
列出文件属性 ls -al 修改文件属性为可读.可写 sudo chmod -c 777 <your file name>