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 ...
随机推荐
- 使用TenforFlow 搭建BP神经网络拟合二次函数
使用简单BP神经网络拟合二次函数 当拥有两层神经元时候,拟合程度明显比一层好 并出现如下警告: C:\Program Files\Python36\lib\site-packages\matplotl ...
- Java6和Java8在Windows上共存
0x00 需求 最近在做一个Android的项目,一开始安装的是Java8用于项目的开发.但是在项目后期需要用到drozer用于检测项目的安全性,要搭建drozer的测试环境必须要使用Java6,否则 ...
- ASP.NET Core MVC – Tag Helper 组件
ASP.NET Core Tag Helpers系列目录,这是第五篇,共五篇: ASP.NET Core MVC – Tag Helpers 介绍 ASP.NET Core MVC – Caching ...
- STL中map的用法
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...
- 1000以内完全数(完美数)获取实现---基于python
"""题目: 如果一个数恰好等于它的因子之和,则称该数为"完全数" .各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它的真约数)的 ...
- 【小白成长撸】--链栈(C语言版)
// 链栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <st ...
- 如何实现一个 Virtual DOM 及源码分析
如何实现一个 Virtual DOM 及源码分析 Virtual DOM算法 web页面有一个对应的DOM树,在传统开发页面时,每次页面需要被更新时,都需要手动操作DOM来进行更新,但是我们知道DOM ...
- MPLS VPN随堂笔记1
MPLS VPN 基础 1.MPLS vpn架构的特点 1.1.允许不同CE传递相同私网路由 1.2.SP内部(所有P路由器)不需要学习CE路由 1.3.无安全保障但有带宽保障(跟SP租用服务) 2. ...
- 201521123079《java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- [转载]sqlserver、Mysql、Oracle三种数据库的优缺点总结
一.sqlserver优点:易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能.与许多其他服务器软件紧密关联的集成性.良好的性价比等:为数据管理与分析带来了灵活性,允许单位在快速变化的环境中 ...